一、demo
socket.io在实时互动功能上是一个较为成熟的技术解决方案,有多种语言的实现。今天,我们使用两个第三方类库,一个client端,一个server端,在小程序中搭建一个简单的聊天室。
简单易用,是socket.io的基本特征。
1,下载https://github.com/wxsocketio/wxapp-socket-io
解压,在weapp_demo目录建立小程序项目。
2,安装:go get github.com/googollee/go-socket.io
然后,使用我们写好的server/main.go文件,运行:go run main.go
3,修改小程序项目app.js文件中的socket地址
const socket = io("ws://localhost:5000/socket.io/")
5000是在第2步指定的端口: http.ListenAndServe(":5000", nil)
/socket.io/是通过它指定的: http.Handle("/socket.io/", server)
可以下载我们打包的代码:链接: https://pan.baidu.com/s/1c2vLIfA 密码: asfb
二、说明
小程序index.js
socket.on('login', function(msg) {
wx.showToast({
title: '登录成功\n用户名:'+msg,
icon: 'success',
duration: 1000
})
setTimeout(
()=>{
wx.navigateTo({
url: '../room/index',
})
},
1000
)
socket.on("login"),代表监听来自server端的login事件,包括broadcast事情和emit事件。
broadcast和emit有什么区别?
前者是发给所有人(除了当前客户端自己),emit是只回复给当前客户端自己。
在main.go有: so.Emit("login", so.Id()) 这是发给小程序当前客户端的。
附详情说明: 服务器信息传输
// send to current request socket client
socket.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients, include sender
io.sockets.emit('message', "this is a test");
// sending to all clients in 'game' room(channel), include sender
io.sockets.in('game').emit('message', 'cool game');
// sending to individual socketid
io.sockets.socket(socketid).emit('message', 'for your eyes only');
--
main.go:
so.Join("chat")