「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序( 三 )


「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

接下来我们创建一个函数处理传入的 WebSocket 连接 。首先我们使用升级的 "Upgrade()" 方法改变初始的 GET 请求 , 使之成为完全的 WebSocket 。如果发生错误 , 记录下来 , 但不退出 。同时注意 defer 语句 , 它通知 Go 在函数返回的时候关闭 WebSocket 。这是个不错的方法 , 它为我们节省了不少可能出现在不同分支中返回函数前的 "Close()" 语句 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

接下来把新的客户端添加到全局的 "clients" 映射表中进行注册 , 这个映射表在早先已经创建了 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

最后一步是一个无限循环 , 它一直等待着要写入 WebSocket 的新消息 , 将其从 JSON 反序列化为 Message 对象然后送入广播频道 。然而 "handleMessages()" Go 程序就能把它送给连接中的其它客户端 。
如果从 socket 中读取数据有误 , 我们假设客户端已经因为某种原因断开 。我们记录错误并从全局的 “clients” 映射表里删除该客户端 , 这样一来 , 我们不会继续尝试与其通信 。
另外 , HTTP 路由处理函数已经被作为 goroutines 运行 。这使得 HTTP 服务器无需等待另一个连接完成 , 就能处理多个传入连接 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

服务器的最后一部分是 "handleMessages()"函数 。这是一个简单循环 , 从“broadcast”中连续读取数据 , 然后通过各自的 WebSocket 连接将消息传播到所以客户端 。同样 , 如果写入 Websocket 时出现错误 , 我们将关闭连接 , 并将其从“clients” 映射中删除 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

构建客户端
如果没有漂亮的 UI , 聊天应用程序将无法完成 。我们需要使用一些 HTML5 和 VueJS 来创建一个简单、干净的界面 , 再利用一些诸如 Materialize CSS 和 EmojiOn 的库来生成一些样式和表情符号 。在“public”目录中 , 创建一个名为“index.html”的新文件 。第一部分很基础 。为了美观 , 我们也会放入一些样式表和字体 。“style.css”是自定义的样式表 , 用于自定义一些内容 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

下一部分仅与接口相关 , 其中只包含一些用于选择用户名、发送消息和显示新的聊天信息的字段 。与 VueJS 交互的细节超出本文的介绍范围 , 你可阅读此文档了解更多 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序
文章图片

文章图片

最后一步只需要导入所有需要的 JavaScript 库 , 包括 Vue、EmojiOne、jQuery 和 Materialize 。我们需要 MD5 库获取来自 Gravatar 的头像 URL , 这用 JavaScript 代码写出来就好理解了 。最后导入 "app.js" 。
「服务器」教你使用Websockets和Go编程语言构建实时聊天应用程序


推荐阅读