• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go实战--golang中使用WebSocket实时聊天室(gorilla/websocket、nkovacs/go-socket.io) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

websocket

在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

我大概调研了一下目前在go生态下使用websocket的方案,感觉websocket这个库是比较好用的。文档友好,API稳定。比较推荐使用。我们的代码也使用了这个库。

下面我们来写一个简单的websocket应用 hello_robot,它的作用很简单,就是你不管和它说什么,它都会说"hello" + 你输入的内容。

server

server有两个作用,第一是监听请求并发送我们的html文件,第二是监听用户输入内容并加以答复。

package main

import (
  "log"
  "net/http"
  "github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{}

我们需要一个Conn类型来表示我们的websocket连接。在客户端,我们需要用一个upgrader对象调用Upgrade函数来获得这个连接的指针。所以,我们首先需要创建这个Upgrader。

func main() {
    http.HandleFunc("/echo", echo)
    http.HandleFunc("/", home)
    log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

在主函数中,我们设定了两个路由,一个是用于send我们的客户端html文件的,一个是用来监听用户输入内容的。最后,我们监听了本地的8080端口。

func home(w http.ResponseWriter, r *http.Request) {
  http.ServeFile(w, r, "home.html")
}

home函数用于发送客户端html文件。

func echo( w http.ResponseWriter, r *http.Request){
        c, _ := upgrader.Upgrade(w, r, nil)
    defer c.Close()
    for {
        mt, message, _ := c.ReadMessage()
            c.WriteMessage(mt, append([]byte("hello "),message[:]...))
    }
}

echo函数负责处理我们的websocket连接。首先,我们调用upgrader.Upgrade(w, r, nil)获得这个连接的指针。然后,我们进入一个循环,不停的读取连接中传来的信息,当有信息传来时,对信息处理后返回给客户端。这里有一点要注意,就是c.ReadMessage()是阻塞的,,也就是说,当有消息来时,它后面的代码才会被执行。

客户端

ws = new WebSocket("ws://127.0.0.1:8080/echo");
ws.onopen = function(evt) {...}
ws.onmessage = function(evt) {...}            
ws.onerror = function(evt) {...}
document.getElementById("send").onclick = function(evt) {
    if (!ws) {return false;}
    ws.send(input.value);
    return;
};

客户端(前端代码)很简单,这里我只写一个框架。首先,用new WebSocket(...)建立一个连接,并为这个连接绑定几个函数,这里我们可以设定onopen(建立连接),onmessage(收到服务端消息),onerror(发生错误)。然后,我们可以给我们的send按钮绑定单击事件,单击后发送数据到后台。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
像Python那样跑go1的代码(Windows下双击运行)发布时间:2022-07-10
下一篇:
html5+go+websocket简单实例代码发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap