socketio支持python版本,socketio支持多少用户在线

  socketio支持python版本,socketio支持多少用户在线

  套接字实现模式1。后端实现1.1。导入的基本实现依赖于依赖关系。groupIdcom.corundumstudio.socketio/groupId工件-套接字/工件ID版本1 . 7 . 11/版本/依赖性套接字io配置

  套接字启动

  下面详细描述了消息类SocketIoHandler的实现。

  后端大概就这么多代码了。很简洁,但没有更多的了。

  1.2.消息处理类监视客户端连接。如果客户端连接成功,则调用。

  该方法标有@OnConnect注释,以指示对连接的监视。这个方法被传入SocketIOClient对象,以获取连接这个客户端的信息。

  这里,最重要的是获取客户端的sessionID和客户端的唯一标识。其实这个sessionID是一个java.util.UUID对象,但是需要指定用户发送信息,所以在这里获取并保存在Map集合中。

  我们在这里不做太多,只是得到一个UUID和唯一的用户标识。这些都是字符串类型。如果用户数量比较多,我们可以存储在Redis中,这样这个地图集合就不存在了。

  监听客户端断开连接。当客户端断开连接时调用。

  在方法上标记@OnDisconnect批注,以指示监控客户端是否已断开连接。同样,SocketIOClient对象也是必需的。当客户端断开连接时,可以获得sessionID和用户唯一标识等客户端信息。但我认为获得用户的唯一ID就足够了,因为sessionID是在连接成功时获得并保存的。

  当客户端断开连接时,获取客户端的唯一标识符,并在保存的客户端信息中将其删除。在这里,它保存在地图集中,所以在这个集中删除它是可以的。把logo删了就不在线了。

  监听有关客户端命名的事件的信息。

  客户端代码应该如下所示。

  触发后端自定义消息事件时,将使用socket.emit(事件名称,参数数据)方法。当事件名称为roomMessageSending时,发送的数据会在这里被调用,客户端的相关信息和客户端发送的数据也可以在这里获得。这个事件名随便写,数据也可以是其他形式,比如对象。前端对象通常按原样分配。

  向指定的客户发送信息。

  关键是这句话。

  //get object @ autowiredprivate socketioserver socketioserver;socket ioserver . get client(room map . get(roomId))。sendEvent(roomId,data);RoomMap.get(roomId)根据要向哪个客户发送信息,然后传递这个客户的唯一标识符。使用这个惟一的标识符,可以获得映射集中的sessionID,这是连接成功时获得的UUID。

  SendEvent(roomId,data),roomId客户的唯一标识,数据需要穿的数据,当然也可以是其他数据类型。

  二、socket.io安装的前端实现

  npm安装-保存套接字. io-客户端

  从“socket.io-client”引入套接字导入SiO注意这两个生命周期/* * *加载组件执行*是数据挂载*/mounted() {this.connect()后的生命周期函数;},/* * *实例销毁后关闭组件执行* */destroyed(){ this . socketioclient . Close();},挂载的()数据已经挂在模板里了。此时,执行connect()方法,以便保存socketIo的信息供以后使用。

  完整的代码模板div H2 ref= send msg ul liv-for=(item,Index)in item arr :key= Index { { item } }/Li/ul/H2 input type= text v-model= msg /button @ click= send msg send/button/div/template脚本从 socket.io-client 导入SiO导出默认{name: hello world ,data(){ return { socket io client:null,itemarr: [欢迎来到WIM1000聊天室],roomId: WIM1000 ,msg: ,};},方法:{ connect(){ this . socketioclient=SiO . connect( http://192 . 168 . 124 . 7:9092?roomId= this . roomId);//服务器连接成功调用this . socket io client . on( connect ,function () {console.log(连接到服务器);});//监听当前用户唯一标识的这个事件名,用户发送的信息被这个事件名接收。this . subscription();},subscription(){ let VM=this;//socket.on(事件名,匿名函数(服务器发送给客户端的数据))是监听服务器端事件This . socketioclient . on(This . roomid,function(data){//这是服务器发送的信息console.log(数据);vm.itemArr.push(数据);});},sendMsg(){//socket . emit( event name , parameter data )方法,在触发后端自定义消息事件时使用,this . socketioclient . emit( room message ending ,this . msg);},},/* * *加载组件执行*是数据挂载*/mounted() {this.connect()后的生命周期函数;},/* * *实例销毁后关闭组件执行* */destroyed(){ this . socketioclient . Close();},};/剧本三。测试效果全过程分析this . socketioclient . on(this . roomid,function (data))在这里,你是在监控当前用户自己的,因为你使用了自己的唯一标识作为监控函数的名称。

  socket ioserver . get client(room map . get(roomId))。sendEvent(roomId,data);该用户发送的数据通过使用客户的唯一标识符作为监控功能来推送数据。

  因为我在测试前部署了两套相同的,模拟两个人。

  开始前端和后端。

  四。商业设计的描述。如果有大量在线用户,后天在地图集合中保存用户登录的sessionID,也就是UUID和用户的唯一ID,是不现实的。建议保存在Redis中。唯一用户标识可以用作关键字,回复UUID可以用作值。设置用户表时,用户ID由分布式ID策略生成。前端成功登录后,你就可以得到自己的ID,然后你就可以在前端把它作为自己唯一的用户ID。当登录成功后,所有在线客户都可以存储在一个Redis数据库中,需要使用时可以直接在这个Redis数据库中查询。如果单个客户连接失败,则意味着它已经离线。只需删除这个Redis数据库中的用户信息。但需要注意的是,同一个用户登录不同的机器怎么办?用户的这个唯一标识符不是直接作为Redis的密钥吗?这把钥匙需要处理。

  但是当其他用户想给不在线的用户发消息时,我们发现目标用户已经不在线了。您可以将需要发送的信息保存到消息队列中,我们会在目标用户上线时发送给目标用户。

  5.广播消息发送

  以后订阅的事件名称和数据都可以写成动态,用户需要打开什么就直接听动态数据。密钥已订阅。事件名称保存在哪里?跟踪代码后发现,这里订阅的事件名称最后都保存在集合中,所以有太多的订阅事件名称不适合打开。

  测试您启动两个客户端,但不订阅任何一个,并在后端发送文本订阅。两个客户端都没有收到任何数据,表示正常。

  将客户唯一标识为WIM2000的开放订阅,并在后端发送订阅请求。

  打开两个订阅,以便两者都接收文本订阅信息。

  哦,暂时就这样了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: