使用 Go 语言和 HTML5 WebSocket 构建一个 Web 聊天室

来源:未知 浏览 1100次 时间 2021-03-15 23:30

使用这个应用程序演示了如何使用谷歌去谈话和HTML5 WebSocket实现一个粗略的基于web的谈话。下图是一个聊天应用程序的屏幕截图:你可以输出电子邮件进入聊天室,我们……去 OnlineUser定义了两个指针措施 PushToClient: p > 英语文本,由OSCHINA独创翻译类型ActiveRoom struct {OnlineUsers map [string] * OnlineUserBroadcast chan chan MessageCloseSign bool}类型消息结构体{MTypestringTextMessage TextMessageUserStatus UserStatus} func(这* ActiveRoom)运行(){{选择{案例b: = <这。广播:_在线:=范围。OnlineUsers{在线。发送< - b}案例c: = <这。CloseSign:如果c = = true{关闭(this.Broadcast)关闭(this.CloseSign)返回}}}} OnlineUser类代表一个用户已成功关闭聊天室,它保护了指针,服务器和客户端ActiveRoom实例的websocket连接,HTML5分析,包括聊天用户之间的通信通道。 从客户端读取消息并将其发送到ActiveRoom运行实例。OnlineUser struct类型{InRoom * ActiveRoomConnection * websocket。ConnUserInfo * UserSendchan消息}func(这* OnlineUser) PullFromClient () {{var内容stringerr: = websocket.Message.Receive(这一点。)内容和连接,如果犯错! = nil{消息返回)m: = {MType: TEXT_MTYPE TextMessage: TextMessage{用户信息:this.UserInfo,时间:humanCreatedAt(),内容:内容,},}this.InRoom。播出的< - m)) func(这* OnlineUser) PushToClient () {b: =范围。发送{犯错:= websocket.JSON.Send(这一点。连接,b)如果犯错! = nil{打破}}}让吗?年代看看过程,WebSocketBuildConnection函数是在主函数注册的处理程序websocket连接: PullFromClient: 这个应用程序演示了如何使用谷歌去谈话和HTML5 websocket实现一个网络聊天的速度。阅读消息发送通道,然后通过websocket把消息给客户端。消息是一个先决条件的数据模型为服务器和客户端数据互联。在此基础上,我们定义了两个消息模型,一个是文本消息,另一种是直接用户在线情况。 同时,聊天室,让我们看看如何实现这样的一个步骤。 运行实例是用于保护戏websocket的接收和处理消息收到。一旦收到新消息传输通道,使用它将消息发送到戏关闭传输通道。 服务器端开始,我们需要一个核心应用程序称为ActiveRoom聊天室引擎的方法。引擎将下面的代码中定义。去将初始化的实例聊天室引擎和找到一个理想的变量的主要功能步骤是激活的。 http。处理(“/”聊天,websocket.Handler (wscon.BuildConnection)) 有websocket连接请求时,该函数将做一些初始化服务来处理新的连接: 你可以进入聊天室通过输出电子邮件,所以我们将从功能赢得相应的用户名和阿凡达,HTML5当你聊天,websocket,你可以看到右边的聊天界面的名字和头像别人在房间里。你也可以跟他们的信息输出。 下面的图片是一个聊天应用程序的屏幕截图:如果(窗口(“WebSocket”)){康涅狄格州= new WebSocket (ws: / / {{.WebSocketHost}} /聊天吗?电子邮件= {{.Email}} ");。onopen = function(){},康涅狄格州。onmessage函数= (evt) {var data = JSON.parse (evt.data);开关(data.MType){案例“text_mtype”: addMessage (data.TextMessage)打破;案例“status_mtype”: updateuser (data.UserStatus)打破;默认值:}};康涅狄格州。onerror = function () {errorMessage(“<强>只发生一个错误。< >强”)},康涅狄格州。onclose = function () {errorMessage(“< >强连接关闭。<强>”)};其他}{errorMessage(“你的浏览器不支持websocket。”);} 如果你吗?对于这个应用程序非常有趣。创建一个源代码,您可能希望赢得十英尺厚的应用后:gochatting。 这两个措施使用for语句等待新消息,除非websocket之一是关闭。中止。 func BuildConnection (ws * websocket.Conn){电子邮件:= ws.Request () .URL.Query () . get("电子邮件")onlineUser: = &OnlineUser {InRoom: runningActiveRoom,连接:ws,发送:使(陈消息,256),用户信息:用户{电子邮件:邮件,名字:字符串。Split(电子邮件,“@”)[0],功能:填词。UrlSize(电子邮件、20)、}}runningActiveRoom。消息OnlineUsers(电子邮件)= onlineUserm: = {MType: STATUS_MTYPE UserStatus: UserStatus{用户:runningActiveRoom.GetOnlineUsers ()},} runningActiveRoom。

标签: 一个谈天新闻email