php发展

首页 » 常识 » 问答 » PHPSocket编程详解
TUhjnbcbe - 2022/8/10 18:23:00
白癜风一对一治疗 http://news.39.net/bjzkhbzy/210620/9084281.html

近来在做的项目有一项需求耗时职责在后盾运转的性能,固然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.?

长按

1
查看完整版本: PHPSocket编程详解