[Go] 实现websocket服务端
2023-02-18 15:41:23 时间
直接使用官方子包可以实现websocket协议,
golang.org/x/net/websocket
如果在这个目录没有这个包就去github下载net库,放进这个目录$GOPATH/src/golang.org/x/net就行了
服务端代码:
package main import ( "time" "log" "net/http" "golang.org/x/net/websocket" ) func main(){ http.HandleFunc("/",index) http.Handle("/websocket",websocket.Handler(instantMessage)) log.Println("start server") err:=http.ListenAndServe(":1234",nil) log.Println(err) } func index(res http.ResponseWriter,req *http.Request){ res.Write([]byte("hello world")) } func instantMessage(w *websocket.Conn) { var error error for { var reply string if error= websocket.Message.Receive(w,&reply);error!=nil{ log.Println("接受消息失败",error) break } log.Println("客户端:",reply) msg:="服务端:"+reply+time.Now().String() log.Println(msg) if error = websocket.Message.Send(w, msg); error != nil { log.Println("发送消息失败") break } } }
客户端代码:
<html> <head> <title>好好学习</title> </head> <body> <script type="text/javascript"> var sock = null; // var wsuri = "wss://127.0.0.1:8080"; //本地的地址 是可以改变的哦 var wsuri = "ws://localhost:1234/websocket"; //本地的地址 是可以改变的哦 window.onload = function() { //可以看到客户端JS,很容易的就通过WebSocket函数建立了一个与服务器的连接sock,当握手成功后,会触发WebScoket对象的onopen事件,告诉客户端连接已经成功建立。客户端一共绑定了四个事件。 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); document.getElementById('receive').innerHTML=e.data; } //发生错误的时候触发 sock.onerror=function (e) { console.log("发生错误时候触发"+wsuri) } }; //如果sock被关闭掉了 这里 也会报错的啊 function send() { var msg = document.getElementById('message').value; sock.send(msg); }; </script> <h1>客户端</h1> <form> <p>发送: </p> <textarea id="message" >我是陶士涵</textarea> <p>接收: </p> <textarea id="receive" ></textarea> </form> <button onclick="send();">给服务器发送消息</button> </body> </html>
相关文章
- [Linux] 编写Dockerfile文件自动构建镜像
- [Linux] nginx的try_files指令实现隐藏index.php的重写
- [linux] shell脚本编程-统计日志文件中的设备号发通知邮件
- [Linux]F5负载均衡器
- [Go] golang设置运行的cpu数
- [Go] golang的MPG调度模型
- [Linux] 进程间通信
- [linux] 多进程和多线程
- [linux] 进程五状态模型
- Linux系统日志介绍
- Linux系统账户后门及排查
- [Go] golang的用途和windows搭建环境
- Linux操作系统root账号密码获取防范技术研究
- [Linux] Linux系统(进程管理)
- [Linux] ssh秘钥对免密码登陆
- [Linux] Linux系统(用户管理)
- [Linux] Linux系统(文件操作)
- [Linux] Linux系统(登陆、退出、修密码)
- [Linux] host dig nslookup查询域名的DNS解析
- [javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程