加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang(10)Web Service - Web Socket

发布时间:2020-12-16 18:52:38 所属栏目:大数据 来源:网络整理
导读:Golang(10)Web Service - Web Socket 8.1 Socket 2 types of socket,TCP Socket,UDP Socket. IP,port,TCP/UDP. 8.2 WebSocket Implement the Push Notification to Browsers https://github.com/astaxie/build-web-application-with-golang/blob/master/eboo

Golang(10)Web Service - Web Socket

8.1 Socket
2 types of socket,TCP Socket,UDP Socket. IP,port,TCP/UDP.

8.2 WebSocket
Implement the Push Notification to Browsers
https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/08.2.md

iOS and Android can support web socket too.
http://www.elabs.se/blog/66-using-websockets-in-native-ios-and-android-apps

Install the the go.net package
>go get code.google.com/p/go.net/websocket

Error Message:
go: missing Mercurial command. See http://golang.org/s/gogetcmd package code.google.com/p/go.net/websocket: exec: "hg": executable file not found in $PATH

Solution:
https://code.google.com/p/go-wiki/wiki/GoGetTools
>sudo port install mercurial

Error Message:
Error: org.macports.extract for port py27-docutils returned: command execution failed Error: Failed to install py27-docutils
:error:extract Failed to install py27-docutils :debug:extract couldn't open "/System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/tclIndex": no such file or directory while executing

Solution:
>sudo port clean
>sudo port selfupdate
>sudo port install py27-docutils
>sudo port install mercurial

>>go getcode.google.com/p/go.net/websocket

Follow the document,but I get these error when I try to connect to web socket server.

Error Message:
failed: Error during WebSocket handshake: Unexpected response code: 403

Solution:
Make them the same domain name.

Go Server Side
package main

import (
"code.google.com/p/go.net/websocket"
"fmt"
"log"
"net/http"
)

func Echo(ws *websocket.Conn) {
var err error

for {
var reply string

if err = websocket.Message.Receive(ws,&reply); err != nil {
fmt.Println("Can't receive")
break
}

fmt.Println("Received back from client: " + reply)

msg := "Received: " + reply
fmt.Println("Sending to client: " + msg)

if err = websocket.Message.Send(ws,msg); err != nil {
fmt.Println("Can't send")
break
}
}
}

func main() {
http.Handle("/",http.FileServer(http.Dir(".")))
http.Handle("/socket",websocket.Handler(Echo))

if err := http.ListenAndServe("127.0.0.1:8008",nil); err != nil {
log.Fatal("ListenAndServe:",err)
}
}

HTML Client Side
<html>
<head></head>
<body>
<script type="text/javascript">
var sock = null;
var wsuri = "ws://127.0.0.1:8008/socket";

window.onload = function() {

console.log("onload");

sock = new WebSocket(wsuri);

sock.onopen = function() {
console.log("connected to " + wsuri);
}

sock.onclose = function(e) {
console.log("connection closed (" + e.code + ")");
}

sock.onmessage = function(e) {
console.log("message received: " + e.data);
}
};

function send() {
var msg = document.getElementById('message').value;
sock.send(msg);
};
</script>
<h1>WebSocket Echo Test</h1>
<form>
<p>
Message: <input id="message" type="text" value="Hello,world!">
</p>
</form>
<button onclick="send();">Send Message</button>
</body>
</html>


8.3 REST
…soon...

8.4 RCP (Remote Procedure Call Protocol)
…snip...

References:
https://github.com/astaxie/build-web-application-with-golang/blob/master/ebook/08.0.md

web socket push notification
http://html5hacks.com/blog/2013/04/21/push-notifications-to-the-browser-with-server-sent-events/
http://stackoverflow.com/questions/15884480/static-html-page-created-the-websocket-connection-golang-server-directly

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读