socketIo

功能描述

  1. WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程。其目的是在WebSocket应用和WebSocket服务器进行频繁双向通信时,可以使服务器避免打开多个HTTP连接进行工作来节约资源,提高了工作效率和资源利用率。

依赖的模块

  1. 无依赖模块

安装

  1. 建议使用workerman做后端搭建 ,也可以加QQ79177618交流

快速使用:

  1. <script>
  2. // 连接服务端,workerman.net:2120换成实际部署web-msg-sender服务的域名或者ip
  3. var socket = io('http://workerman.net:2120');
  4. // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数
  5. uid = 123;
  6. // socket连接后以uid登录
  7. socket.on('connect', function(){
  8. socket.emit('login', uid);
  9. });
  10. // 后端推送来消息时
  11. socket.on('new_msg', function(msg){
  12. console.log("收到消息:"+msg);
  13. });
  14. // 后端推送来在线数据时
  15. socket.on('update_online_count', function(online_stat){
  16. console.log(online_stat);
  17. });
  18. </script>

自定义事件

  1. <?php
  2. // 指明给谁推送,为空表示向所有在线用户推送
  3. $to_uid = "";
  4. // 推送的url地址,使用自己的服务器地址
  5. $push_api_url = "http://workerman.net:2121/";
  6. $post_data = array(
  7. "type" => "publish",
  8. "content" => "这个是推送的测试数据",
  9. "to" => $to_uid,
  10. );
  11. $ch = curl_init ();
  12. curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
  13. curl_setopt ( $ch, CURLOPT_POST, 1 );
  14. curl_setopt ( $ch, CURLOPT_HEADER, 0 );
  15. curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
  16. curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
  17. curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:"));
  18. $return = curl_exec ( $ch );
  19. curl_close ( $ch );
  20. var_export($return);

自定义事件

  1. 客户端通过下面的方法触发服务端的chat message事件。
  2. <script>
  3. // 连接服务端
  4. var socket = io('http://127.0.0.1:3120');
  5. // 触发服务端的chat message事件
  6. socket.emit('chat message', '这个是消息内容...');
  7. // 服务端通过emit('chat message from server', $msg)触发客户端的chat message from server事件
  8. socket.on('chat message from server', function(msg){
  9. console.log('get message:' + msg + ' from server');
  10. });
  11. </script>

分组

  1. socket.io提供分组功能,允许向某个分组发送事件,例如向某个房间广播数据。
  2. 1、加入分组(一个连接可以加入多个分组)
  3. $connection->join('group name');
  4. 2、离开分组(连接断开时会自动从分组中离开)
  5. $connection->leave('group name');

向客户端发送事件的各种方法

  1. $ioSocketIO对象。$connection是客户端连接
  2. $data可以是数字和字符串,也可以是数组。当$data是数组时,客户端会自动转换为javascript对象。
  3. 同理如果客户端向服务端emit某个事件传递的是一个javascript对象,在服务端接收时会自动转换为php数组。
  4. 1、向当前客户端发送事件
  5. $connection->emit('event name', $data);
  6. 2、向所有客户端发送事件
  7. $io->emit('event name', $data);
  8. 3、向所有客户端发送事件,但不包括当前连接。
  9. $connection->sockets->emit('event name', $data);
  10. 4、向某个分组的所有客户端发送事件
  11. $io->to('group name')->emit('event name', $data);

特别说明

  1. 使用时建议参考 workerman官方提供的PHPSocket.IOPHP跨平台实时通讯框架