Egg: 关于在EGG中使用 websocket

Created on 9 May 2017  ·  8Comments  ·  Source: eggjs/egg

首先我用的是WS模块
在app/service/ws
var WebSocketServer = require('ws').Server
var wss = null
var _ws = null
module.exports = app => {
return class User extends app.Service {
* set_websocket() {
wss = new WebSocketServer({
port: 8077,//监听接口

        });
        wss.on('connection', function (ws) {
            console.log("服务器创建链接")
            _ws = ws
            console.log("服务器链接成功")
        })

    }
    * send_websocket(msg) {
        _ws.send(msg)

    }

}

};

然后在根目录中新建一个app.js
module.exports = app => {
app.beforeStart(function* () {
// 应用会等待这个函数执行完成才启动

     const ctx = app.createAnonymousContext();

     yield ctx.service.ws.set_websocket()

     console.log('app.js文件执行成功')

})

}

这样的思路对不对

我的业务是微信小程序 本人新手
当客户端 发起请求支付时 请求websocket 连接
当用户成功支付时 自己的服务端有一个接口专门和微信官方服务器进行通讯验证的 当验证成功后
自己的服务端 向小程序客户端发送一条讯息
yield ctx.service.ws.send_websocket("订单已支付")

这样的 有没有大神 求帮助的

Most helpful comment

@z253573760 使用 https://github.com/mdluo/socket.io-client-mp ,支持 ArrayBuffer 的微信小程序 socket.io 客户端

All 8 comments

直接用 egg-socket.io 吧

试了几次 都失败了 SOCKET.IO

我觉得你用socket.io 还是要用个socket.io的client. 用原始的websocket 很麻烦的.
你的client 还要自己解析socket.io的协议.

socket.io的client在微信上面不能直接用
这个库wxapp-socket-io 是微信上面的人家做好的socket.io的client .应该比你直接用websocket方便多了.
服务端用egg-socket.io 插件也比较方便.
你用app.io.route 就会自动跟你on ,然后直接在客户端emit就行了
如,服务端
app.io.route('addMusic', app.io.controllers.music.addMusic)
客户端
socket.emit('addMusic',{music:{title:""}})
在app.io.controllers.music.addMusic里面就直接this.args 就可以得到参数了

遇到 egg-socket.io 的问题再来问吧

@z253573760 使用 https://github.com/mdluo/socket.io-client-mp ,支持 ArrayBuffer 的微信小程序 socket.io 客户端

@mdluo 你可以参考 egg-socket.io 封装一个 egg 插件,但要注意的是多进程情况下如何处理,egg-socket.io 就是干这个的。

@atian25 不是这样的。 @mdluo 封装的只是客户端,不是服务端代码。

Was this page helpful?
0 / 5 - 0 ratings