用socket.io-client的小坑

最近在结合react和socket.io做应用,碰到了小坑,记录一下。

用socket.io的时候,前后台要分别引入socket.io-client 和 socket.io

在后台,因为我还用了koa,所以这里碰到了个小坑:

let Koa = require("koa");
let app = new Koa();
let server = require("http").Server(app.callback());
let io = require("socket.io")(server);

io.on("connection", function(socket){
    console.log("server connecting");
    socket.on("clientMsg", (data)=>{
        console.log(data)
        socket.emit("serverMsg", "your message" + data);
    })
});

server.listen(8081, ()=>{
    console.log("ws listening on 8081");
});

注意到这里我们采用了http模块来同时处理websocket和koa,所以监听事件需要绑定在这个http模块上面。

在浏览器端,最开始的时候我是这样做的

import io from ("socket.io-client");

let socket =  io.connect("http://localhost:8081",{
    path: "chat"
})

然后后端也把路径设为'chat',奇怪的是无论如何都不能connect上。

反反复复查了很多资料,最后改成这样才跑通的。

let socket = require('socket.io-client')('http://localhost:8081/');

而且一旦带上path就会出错。

我不死心,查了一下路径设置,发现在用socket.io时需要用命名空间来设置路径,所以如果要把path指定为/chat,则要这样:

client:

let socket = require('socket.io-client')('http://localhost:8081/chat');

server:

io
    .of("/chat")              //指定命名空间
    .on("connection", function(socket){
    console.log("server connecting");
    socket.on("clientMsg", (data)=>{
        console.log(data)
        socket.emit("serverMsg", "your message" + data);
    })
});
搞定!


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值