websocket 如何实现动态聊天室

我想实现一个动态生成聊天室应用;
聊天室通过用户创建;
每个聊天室有独立socket连接 类似:wss://xxx.com/:roomid
请教一下一下实现的技术点有哪些?

希望用这些来实现 node.js + koa2 + ws

阅读 3.5k
3 个回答

如果是为了使端点独立,那么 koa2 做中间层即可,设置一个路由响应创建聊天室的请求即可,并返回 socket 链接的 url 即可。

但其实没有必要这样,一般公用一个断点就足够了,你主要做的是设计一套比较健全的消息互通协议,以支持客户端与服务端再通信时,能够达到单播、多播以及广播的目的,这样就可以模拟聊天室的业务场景了。

是想要这样吗

const Koa = require('koa');
const http = require('http')
const WebSocket = require('ws');
const url = require('url')

const app = new Koa();

app.use((ctx, body) => {
    if (ctx.url === "/") {
        ctx.body = `ws://localhost:3000/${new Date().getTime()}`
    }
})
const server = http.createServer(app.callback())
const ws = new WebSocket.Server({ noServer: true });

server.on('upgrade', function upgrade(request, socket, head) {
    const pathname = url.parse(request.url).pathname;

    if (/\/\d+/.test(pathname)) {
        // do something .....
        ws.handleUpgrade(request, socket, head, function done(ws) {
            ws.emit('connection', ws, request);
        })
    } else {
        socket.destroy();
    }
})

server.listen(3000)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题