推荐 swoole ide:https://github.com/eaglewu/swoole-ide-helper 下载放在项目目录
Swoole 在IDE下自动识别类、函数、宏,自动补全函数名
Swoole 结构,便于开发过程中查看文档,以及屏蔽IDE undefined 提示,便于快速查看函数用法。
Swoole releases 版本下载地址:https://github.com/swoole/swoole-src/releases
API 手册在线预览:Swoole API Manual
开发Swoole项目同时,在IDE中打开/导入本文件即可。
使用 IDE自带 Include Path
功能引入 helper 目录
PHPstorm使用演示(其他IDE同理):
个人特别喜欢 swoole 编程,感觉好强大
不说了直接上代码试试效果:
TCP服务器端
server.php
<?php /** * User: wangjie404 * Date: 2016/7/26 * Time: 14:19 * TCP Server */ //0.0.0.0表示监听所有地址,9501表示端口 $server = new swoole_server('0.0.0.0',9501); //开始事件函数回调的设定 ,建立连接 $server->on("connect",function(swoole_server $ser,$fd,$from_id){ echo "Connected"; $ser->send($fd,"hello\n"); }); // 接收数据 $data 发来的数据 $server->on("receive",function(swoole_server $ser,$fd,$from_id,$data){ //接收客户端数据 echo "received:".$data; /** *发送数据到客户端 *发送的数据。TCP协议最大不得超过2M,UDP协议不得超过64K *发送成功会返回true,如果连接已被关闭或发送失败会返回false */ // $ser->send($fd,'Server:hello');
$ser->send($fd,'Server:吃了\n'); }); // 关闭链接 $server->on("close",function($ser,$fd,$from_id){ echo "close"; }); $server->start();
?>
进入你的文件所在目录 运行 php server.php
打开一个新的窗口 输入 telnet 你的ip 端口 输入内容 查看 服务器响应的消息
备注:一个server 是可以接受多个链接 的具体自己操作了。
2.本机回环(127.0.0.1),局域网通信,外网通信3种方式的差异
本机回环127.0.0.1 | 内存 | 等于进程间的通信 | 延迟微妙级别 |
局域网 192.168.11.1 | 网卡-交换机 | 千兆 or 万兆网络 | 0.2-1ms左右 |
外网 14.18.203.64 | 网卡-路由器-英特网 | 非公网IP不可用 | 10-100ms |
3.数据包从操作系统到网卡、交换机、路由器、互联网,再到客户端的网络环境,到用户主机操作系统,最后到客户端程序
下面 来介绍一下 TCP/IP协议4层
1.链路层:交换机从主机到网线到交换机到路由器
2.网络层:从网关到外面 ,各个路由器之间的转发
3.传输层: 主要有tcp/udp udp为比较原始的传输方式
4.应用层:协议 就是我们的http ,smtp 等
4.路由协议 :
路由器之间交换信息,BGP
网关就是出口路由器 如 192.168.1.1
网络段,主机段 192.168.1.100
掩码:255.255.255.0
广播 :192.168.1.255
DNS:应用层概念用于将域名解析为ip,UDP
########################################################
下面 介绍 tcp_client 就不用通过 telnet 方式连接了
直接上代码:
<?php
/**
* User: Administrator
* Date: 2016/7/26
* Time: 15:55
*/
//通过tcp 方式,异步
$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);
//@param $event_name
//@param $callback_function
//打开连接
$client->on("connect",function($cli){
echo "client connected.\n";
});
//关闭链接
$client->on("close",function($cli){
echo "client close.\n";
});
//错误信息(必须 不然会报错)
$client->on("error",function($cli){
echo "error.\n";
});
//接收服务器信息
$client->on("receive",function($cli,$data){
echo "received:$data\n";
// 每隔3秒向服务器发送消息
sleep(3);
$cli->send('吃饭了么?');
});
//下面是我虚拟机的IP
$client->connect('192.168.11.91',9501);
运行php server.php
运行php client.php
哈哈!有啥问题 可以回复解决额;大家可以一起交流讨论;