近来在做的项目有一项需求耗时职责在后盾运转的性能,固然PHP并不是特别恰当做常驻后盾的保卫历程,然则由于项目紧要代码都是基于PHP完成,假设运转在后盾的保卫历程变更其它言语会特别不便利。是以不成防止会触及到Web端和Daemon部份的通讯,Socket是一个不错的方法。Socket是甚么socket的英文原义是“孔”或“插座”。做为BSDUNIX的历程通讯机制,取后一种意义。每每也称做”套接字”,用于形色IP住址和端口,是一个通讯链的句柄。在Internet上的主机正常运转了多个效劳软件,同时供给几种效劳。每种效劳都翻开一个Socket,并绑定到一个端口上,不同的端口对应于不同的效劳。
以上实质来自百度百科
浅显说来,socket也许协助不同的效劳在不同的端口停止通讯。
PHP中的完成 效劳端
1.?php
2.set_time_limit(0);
3.//配置主机和端口
4.host=.0.0.1;
5.port=;
6.//建立一个tcp流
7.socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)
8.ordie(socket_create()failed:.socket_strerror(socket_last_error()));
9.
10.//配置阻滞形式
11.socket_set_block(socket)
12.ordie(socket_set_block()failed:.socket_strerror(socket_last_error()));
13.
14.//绑定到端口
15.socket_bind(socket,host,port)
16.ordie(socket_bind()failed:.socket_strerror(socket_last_error()));
17.
18.//最先监听
19.socket_listen(socket,4)
20.ordie(socket_listen()failed:.socket_strerror(socket_last_error()));
21.
22.echoBindingthesocketonhost:port...\n;
23.
24.while(true){
25.
26.//担当接连哀求并挪用一个子接连Socket来管教客户端和效劳器间的音信
27.if((msgsock=socket_accept(socket))0){
28.echosocket_accept()failed:.socket_strerror(socket_last_error());
29.}else{
30.//读数据
31.out=;
32.while(buf=socket_read(msgsock,)){
33.out.=buf;
34.}
35.
36.//写数据
37.in=数据是out;
38.socket_write(msgsock,in,strlen(in));
39.}
40.//停止通讯
41.socket_close(msgsock);
42.}
43.socket_close(socket);
44.?
复制代码
效劳端紧要停止了下列环节:
·建立Socket的监听,等候接连
·当链接到来时,开启一个子接连管教IO
·担当来自客户端的传输数据
·将了局写回给客户端
客户端
1.?php
2.set_time_limit(0);
3.host=.0.0.1;
4.port=;
5.
6.//建立一个tcp流
7.socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)
8.ordie(socket_create()failed:.socket_strerror(socket_last_error()));
9.
10.echotrytoconnecttohost:port...\n;
11.result=socket_connect(socket,host,port)
12.ordie(socket_connect()failed:.socket_strerror(socket_last_error()));
13.
14.in=hello\n;
15.if(!socket_write(socket,in,strlen(in))){
16.echosocket_write()failed:.socket_strerror(socket);
17.}else{
18.echo发送胜利!\n;
19.}
20.
21.out=;
22.while(buf=socket_read(socket,)){
23.out.=buf;
24.}
25.echo担当实质为:out\n;
26.socket_close(socket);
27.?
长按