为了账号安全,请及时绑定邮箱和手机立即绑定

php 实现一对一聊天的遇到的问题该如何解决??

php 实现一对一聊天的遇到的问题该如何解决??

PHP
qq_笑_17 2019-03-07 23:36:25
我的程序设计如下图: 客户端通信数据格式为: $msg = [ 'from' => 'selfUsername' , 'to' => 'toUsername' , 'msg' => 'hello boy' ]; $msg = serialize($msg); 第一种实现与遇到的问题: 转发服务器创建的监听客户端连接的子进程接受到客户端发送的消息后,解析数据,找到监听对应客户端连接的子进程,将消息发送给子进程,然后那个子进程再将消息发送给对应的客户端链接。 这边有一个难题,就是如何给创建的子进程设立标识(使用进程ID来唯一标识一个子进程可以不)??进程间通信的方式该使用哪一种(消息队列、共享内存、socket...)?? 第二种实现与遇到的问题 客户端连接的时候,将 资源描述符 和 创建的监听客户端连接的子进程ID 保存下来。客户端连接发来消息,对应监听的子进程接受到消息后,通过 进程ID 找到 对应的客户端连接资源描述符,直接向该客户端连接发送消息。 这边碰到的问题是,客户端链接的资源描述符 是 resource 类型的,无法在共享内存中维护一个保存有所有子进程ID 和 每个子进程ID对应监听的客户端连接资源描述符 的数组。因为 shm_put_var 中第二个参数写着保存的只能是能够被 serialize 的变量类型(resource 类型的无法序列化)! 请问,按照我上面提供的程序设计图,如何实现一对一聊天?? 该问题有另外一种方法实现,参考我的另一种实现 私聊(PHP实现)。 不知道就这边的思路该如何实现??
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

我是来推荐 swoole 的。怎么可以不用这个,或者使用 easyswoole。
官网有 socket 的 demo。

https://img1.sycdn.imooc.com//5c8f64110001dd5408000256.jpg

https://img1.sycdn.imooc.com//5c8f64130001076708000710.jpg

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信