在《使用nginx-push-stream-module构建在线聊天室(一)》这篇文章中已经介绍了nginx-push-stream-module插件的安装,本文中介绍一下如何通过程序来实现聊天功能。
其实实现聊天功能一个是客户单代码另外是服务器端的代码,关于客户端的程序在安装源文件中也有说明并且支持websocket、长轮循、stream(iframe)、eventsource等多种模式,下面给出最简单的监听代码。
<div id="messages" style="width:600px;height:300px;overflow:scroll;">这里显示聊天内容</div>
<script src="js/pushstream.js" ></script>
<script type="text/javascript" >
function messageReceived(text, id, channel) {
document.getElementById('messages').innerHTML += text + '<br>';
};
var pushstream = new PushStream({
host: '主机名',
port: "端口",
modes: "websocket",
messagesPublishedAfter: 5,
messagesControlByArgument: true
});
pushstream.onmessage = messageReceived;
pushstream.addChannel('频道名称');
pushstream.connect();
</script>
其中主机名可以填写ip或者域名,端口填写搭建服务时配置的端口,频道名称和发布时一致,这样就可以实现监听了,可以在命令下发送指令测试一下。
另外说一下发送消息的代码,实现思路有两种。一种就是使用PHP执行linux系统命令,但是这个不推荐,因为允许PHP执行系统命令是比较危险的事情,很多服务器也禁止了这些函数。第二种就是通过PHP的curl扩展进行post数据,这是推荐的一种方式。下面给出服务器端的PHP代码。
//以下代码只是示例没有做安全处理 需要根据实际情况做安全认证
$channel = $_POST['ch']; //频道
$msg = $_POST['msg']; //消息内容
$url = "http://localhost:8080/pub?id=" . $channel; //服务器地址
if ($channel && $msg)
{
curlRequest($url,$msg);
}
else
{
exit("缺少参数");
}
/**
使用curl方式实现get或post请求
@param $url 请求的url地址
@param $data 发送的post数据 如果为空则为get方式请求
return 请求后获取到的数据
*/
function curlRequest($url,$data = ''){
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = false; //是否返回响应头信息
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向
$params[CURLOPT_TIMEOUT] = 30; //超时时间
if(!empty($data)){
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $data;
}
$params[CURLOPT_SSL_VERIFYPEER] = false;//请求https时设置,还有其他解决方案
$params[CURLOPT_SSL_VERIFYHOST] = false;//请求https时,其他方案查看其他博文
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
客户端可以使用普通表单来实现,这样实现了使用程序发送和监听消息的功能,但是还是不够完善,比如界面和数据的持久化,后续会介绍如何对数据进行持久化的实现思路。
-
不过此刻刘元吉恐怕有些麻烦,店中的那些江湖豪客均对他虎视眈眈,想必都是冲着藏宝图而来。而他一人独据一桌,居中而坐,雪亮的钢刀斜插在桌上,幸运飞艇 澳洲幸运20只管旁若无人地饮酒。陆鹤云见了他这凛凛气概,心中敬佩(0) 回复 (0)
-
百家樂的玩家下注一段時間就會發現,有段時間特別好賺(0) 回复 (0)