基于[https://my.oschina.net/u/3470006/blog/4791421]的内容,可以做个稍微有趣的功能,比如关键词回复
为了不过于污染服务端的socket代码,新建message_handler.php,写上
function message_handler($Message,$Client){
}
在server.php引入此文件,并将[把接收的消息回发给客户端]下面一行的代码更改为
message_handler($Message,$Client);
然后在新建message_handler.php定义一个关键词回复数组常量
const KEYWORD_REPLY=['你好'=>'你好,你可以直接输入消息来获得回答','你是谁'=>'我是关键词回复器'];
再定义一个无法处理的默认回复常量
const KEYWORD_REPLY_UNKNOWN='无法理解你的问题';
修改message_handler函数
$Reply=isset(KEYWORD_REPLY[$Message])?KEYWORD_REPLY[$Message]:KEYWORD_REPLY_UNKNOWN;
socket_write($Client,$Reply.PHP_EOL);
这样就实现了关键词回复,这时候为了直观对客户端的代码进行修改,修改成计时聊天显示你我那样,于是修改while代码块里面的部分
if($Message===''){
//要禁止空消息,否则会卡住
echo '[系统消息]你不能发送空消息'.PHP_EOL;
}
else{
socket_write($Socket,$Message);
echo '[你]'.date('Y-m-d H:i:s').PHP_EOL.$Message.PHP_EOL;
//发送消息后接收服务端的回复
$Reply=socket_read($Socket, 8192);
echo '[对方]'.date('Y-m-d H:i:s').PHP_EOL.$Reply.PHP_EOL;
}
把上方服务端初始问好消息也改成这种形式
echo '[对方]'.date('Y-m-d H:i:s').PHP_EOL.$Message.PHP_EOL;
这样一个对话形式的关键词回复就实现了