利用php websocket实现小程序消息推送或及时通信功能 wss的实现 原 荐

栏目: 后端 · 发布时间: 5年前

内容简介:小程序没有消息推送功能,要想实现可以通过php的websocket来实现一.配置服务器.1.上传web-msg-sender目录到服务器(下载地址https://www.workerman.net/web-sender)

小程序没有消息推送功能,要想实现可以通过 php 的websocket来实现

一.配置服务器.

1.上传web-msg-sender目录到服务器(下载地址https://www.workerman.net/web-sender)

2.修改start_io.php文件修改证书路径(nginx证书)

$sender_io = new SocketIO(2120);

修改成

$context = array(
    'ssl' => array(
        'local_cert'  => '/ssl/cn_bundle.crt',
        'local_pk'    => '/ssl/pk.key',
        'verify_peer' => false,
    )
);
// PHPSocketIO服务
$sender_io = new SocketIO(2120,$context);

证书可以通过腾讯云申请,下载后选择里面的nginx证书即可

3.参考http://doc.workerman.net/faq/disable-function-check.html检查环境

如有禁用函数vi /usr/local/php/etc/php.ini 找到disable_functions 删除禁用项

4.进入web-msg-sender目录 后执行启动命令 windows系统进入到框架目录里双击start_for_win.bat文件启动

php start.php start -d

5.将2120 2121 端口开放权限 并加入云服务器安全组

可以在cmd中执行 telnet 域名 2120 测试是否已经连通

6.别忘了把域名或ip添加到微信小程序授权域名的wss域名中,否则是无法访问的

二.配置客户端

1小程序客户端

weapp.socket.io.js文件下载

http://fourpan.com/fs/exi6ao0gg6vi9pdf04/

https://github.com/10cella/weapp.socket.io

const io = require('../../utils/weapp.socket.io.js')
Page({
    /**
     * 页面的初始数据
     */
    data: {},

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function () {
        var that = this;
        var uid='bitefu1';  
        const socket = io('https://域名或ip:2120')
        socket.on('connect', () => {
          console.log(socket.connected); // true
          socket.emit('login', uid);
        });
        
        socket.on('new_msg', d => {
          console.log('received news: ', d)
        })
    }
})

2.网页客户端

便于发送测试特意发个web端方便测试用.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>
<script src='//cdn.bootcss.com/jquery/1.11.3/jquery.js'></script>
<script>
var domain='域名或ip';
</script>
</head>
<body>
<div style="width:850px;">   
<h3>测试:</h3>
当前用户uid:<b class="uid"></b><br>
可以通过url:<a id="send_to_one" href="" target="_blank"><font style="color:#91BD09">http://<font class="domain"></font>:2121?type=publish&to=<b class="uid"></b>&content=消息内容</font></a>  向当前用户发送消息<br>
可以通过url:<a href="" target="_blank"  id="send_to_all" ><font style="color:#91BD09">http://<font class="domain"></font>:2121?type=publish&to=&content=消息内容</font></a> 向所有在线用户推送消息<br>
<script>
    // 使用时替换成真实的uid,这里方便演示使用时间戳
    var uid = Date.parse(new Date());
    $('#send_to_one').attr('href', 'http://'+domain+':2121/?type=publish&content=%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9&to='+uid);
    $('.uid').html(uid);
	$('#send_to_all').attr('href', 'http://'+domain+':2121/?type=publish&content=%E6%B6%88%E6%81%AF%E5%86%85%E5%AE%B9');
    $('.domain').html(domain);
</script>
</div>

<script>
$(document).ready(function () {
    // 连接服务端
    var socket = io('https://'+domain+':2120');
    // 连接后登录
    socket.on('connect', function(){
    	socket.emit('login', uid);
    });
    // 后端推送来消息时
    socket.on('new_msg', function(msg){
         $('#content').append('收到消息:'+msg+'<br>');
    });
    // 后端推送来在线数据时
    socket.on('update_online_count', function(online_stat){
        $('#online_box').html(online_stat);
    });
});
</script>
<div id="online_box"></div>
<div id="content"></div>
</body>
</html>

三服务端发消息

<?php
// 指明给谁推送,为空表示向所有在线用户推送
$to_uid = 'bitefu1';
// 推送的url地址,使用自己的服务器地址
$push_api_url = "http://域名或ip:2121/";
$content='大家好啊';
$post_data = array(
   "type" => "publish",
   "content" =>$content ,
   "to" => $to_uid, 
);
$res=curlget($push_api_url,$post_data,'POST',array(),true);
var_export($res);

function curlget($url, $params='', $method = 'GET', $header = array(), $multi = false,$debug=false,$optsother='') {
	$opts = array(CURLOPT_TIMEOUT => 10,CURLOPT_RETURNTRANSFER=> 1,CURLOPT_SSL_VERIFYPEER=> false,CURLOPT_SSL_VERIFYHOST=> false,CURLOPT_HTTPHEADER => $header);		
	switch (strtoupper($method)) {/* 根据请求类型设置特定参数 */
		case 'GET':$opts[CURLOPT_URL] = $params?$url.'?'.http_build_query($params):$url;break;
		case 'POST':$params = $multi ? $params : http_build_query($params);//判断是否传输文件
    	$opts[CURLOPT_URL] = $url;$opts[CURLOPT_POST] = 1;$opts[CURLOPT_POSTFIELDS] = $params;break;			
		default:if($debug)E('不支持的请求方式!');break;
	}$ch = curl_init();if($optsother && is_array($optsother))$opts=$opts+$optsother;curl_setopt_array($ch, $opts);$data = curl_exec($ch);$error = curl_error($ch);curl_close($ch);/* 初始化并执行curl请求 */
	if($error && $debug){E('请求发生错误:'.$error);}
	return $data;
}

以上所述就是小编给大家介绍的《利用php websocket实现小程序消息推送或及时通信功能 wss的实现 原 荐》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Defensive Design for the Web

Defensive Design for the Web

37signals、Matthew Linderman、Jason Fried / New Riders / 2004-3-2 / GBP 18.99

Let's admit it: Things will go wrong online. No matter how carefully you design a site, no matter how much testing you do, customers still encounter problems. So how do you handle these inevitable bre......一起来看看 《Defensive Design for the Web》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具