websocket php sae,三分钟轻松用上WebSocket服务

channel服务已经支持公网API

各位开发者,新浪云支持的channel服务当前已经支持从公网API调用创建连接和发送消息接口,且该服务免费。

一个真实的用例演示如何使用

使用前需要了解

新浪云提供的websocket服务不能通过连接上行说明,需要通过单独的接口以HTTP的方式上行。

示意图

f1de0784bc1009939624db3613028dcb.png

第一步-获取websocket连接地址

网页在渲染完成时调用create_channel.php接口获取一个websocket链接信息,其中client_id也就是channel的名称,由客户端提供,调用成功时服务端会返还一个websocket链接地址。

第二步-连接到websocket服务

通过新建一个WebSocket对象,并将websocket的open、message、close、error四个事件托管到本地的四个方法,如果对此不是很理解,请阅读VUE的代码https://cn.vuejs.org/。

this.websock = new WebSocket(ws_uri);

this.websock.onopen = this.WebSocketOpen;

this.websock.onmessage = this.WebSocketOnMessage;

this.websock.onclose = this.WebSocketClose;

this.websock.onerror = this.WebSocketError;

第三步 - 消息发送

如上所说,消息不能通过websocket的连接上行,需要单独通过HTTP接口将数据发送给自己封装的HTTP API,由这个HTTP API通过新浪云提供的GAPI将说明写入到websocket。

关于wss

channel服务提供wss服务,但现在默认创建连接时返回的连接地址是一个ws://地址,需要你手工将其替换为wss,PHP替换的方式,其他的开发语言可以参考实现:

// 将ws://替换为wss://

$web_socket_address = 'wss'.substr($web_socket_address, 2);

连接后

示例连接后:

5c89c5c6ee36c7251a592c4adeb92a34.png

发送一条消息

发送数据后可以看到从websocket的frame中看到了数据,且在消息列表页面中出现了。

ca81b5a98e77d1b1c866e42eb6e1daa3.png

关于广播

channel服务不支持广播,如果用于多人聊天模式,请在服务端将client_id按组划分,使用memcached服务器存储一个逻辑分组中的所有连接,在有消息上行是遍历组下的所有的连接发送消息。

每一个客户端应该使用不同的标记client_id,重复使用会发生无法预料的后果。

在线测试

源码

如果代码不在新浪云环境执行,需要注意以下两点:

请将base.php中的配置参数由常量改为字符串:

// 这里的SAE_ACCESSKEY换为应用的ACCESSKEY

define('SAE_CHANNEL_ACCESSKEY', SAE_ACCESSKEY);

// 这里的SAE_CHANNEL_SECRETKEY换为应用的SECRETKEY

define('SAE_CHANNEL_SECRETKEY', SAE_SECRETKEY);

放置代码的机器需要能访问公网,因为程序需要和新浪云GAPI网关通信。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值