首页 > 后端开发 > 正文

php的socket框架 workerman无法socket怎么办

2023-09-09 01:07:53 | 我爱编程网

后端开发是很多朋友有关注的类型,那么php的socket框架 workerman无法socket怎么办,我爱编程网为大家带来了相关文章,希望给大家提供参考。

php的socket框架 workerman无法socket怎么办

workerman无法socket怎么办



workerman无法socket怎么办?
Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。但是在配置workerman情况下,不免有些意想不到的错误,下面小编整理网上资料并整合自身遇到的问题,给出以下几种常用的解决方案。
推荐:workerman教程
现象1
启动后报错类似如下:
php start.php start
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxxx (Address already in use) in /home/workerman-chat/Workerman/Worker.php on line xxxx关键字: Address already in use
失败原因:
端口被占用,无法启动。
可以通过命令netstat -anp | grep 端口号来找出哪个程序占用了端口。
然后停止对应的程序释放端口解决。
如果不能停止对应端口的程序,可以通过更换workerman的端口解决。
如果是Workerman占用的端口,又无法通过stop命令停止(一般是丢失pid文件或者主进程被开发者kill了导致),可以通过运行以下两个命令杀死Workerman进程。
killall php
ps aux|grep WorkerMan|awk '{print $2}'|xargs kill -9现象2
启动后报错类似如下:
PHP Warning: stream_socket_server(): unable to connect to tcp://xx.xx.xx.xx:xxx (Cannot assign requested address) in /home/GatewayWorker/Workerman/Worker.php on line xxxx关键字:Cannot assign requested address
失败原因:
启动脚本ip参数写错,不是本机ip,请填写本机ip机或者填写 0.0.0.0(表示监听本机所有ip)即可解决。
提示:Linux系统可以通过命令 ifconfig查看本机所有网卡ip。
如果您是腾讯云用户,注意您的公网ip实际是代理服务器ip,公网ip并不属于你的服务器,所以无法通过公网ip绑定,但是可以通过0.0.0.0来绑定。
现象3
启动后报错类似如下:
Waring stream_socket_server has been disabled for security reasons in ...失败原因:
stream_socket_server 函数被php.ini禁用
解决方法
1、运行php --ini 找到php.ini文件
2、打开php.ini找到disable_functions一项,将stream_socket_server禁用项删掉
现象4
启动后报错类似如下:
PHP Warning: stream_socket_server(): unable to connect to tcp://0.0.0.0:xxx (Permission denied)失败原因
linux下监听端口如果小于1024,需要root权限。
解决办法
使用大于1024的端口或者使用root用户启动服务。
现象5
启动后报错类似如下:
WebSocket connection to 'ws://x.x.x.x:2346/' failed: Error in connection establishment:net::ERR_NAME_NOT_TIMED_OUT失败原因
服务器防火墙挡住了设置的端口,这里于2346为例。
解决办法
进入Linux vim编辑服务器防火墙文件,添加你需要开发的服务器端口保存后重启防火墙。
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# iptables -nvl #查看允许访问的端口
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# vim /etc/sysconfig/iptables #编辑
[root@iZwz9xxxxxxxxxxxxxxxxxx conf]# /etc/init.d/iptables restart #重启

php的socket框架 workerman无法socket怎么办

php为什么不适合socket


作为一名非底层程序员,要想深入了解socket的内部实现机制是很困难的,我们只需明白socket是一套操作系统封装好的实现进程通信的函数,会创建和调用就够了。

PHP的语言特性和自身定位决定了它只适合做socket客户端,而不适合做socket服务器端。
因为socket主要面向底层和网络服务开发,一般服务器端都是用 C 或 Java 等语言实现,这样能更好地操作底层,对网络服务开发中遇到的问题(如并发、阻塞等)也有成熟完善的解决方案,而PHP显然不适合这种应用场景。 (推荐学习:PHP视频教程)
实际上,PHP操作MySQL数据库也是通过socket进行的,这正是由于socket屏蔽了底层的协议,使得网络服务之间的互联互通变得简单。

除了传统的服务器端语言实现的socket外,随着HTML5的流行,浏览器客户端实现的WebSocket也逐渐兴起,对于这一点值得关注,FlashSocket也是一个不错的解决方案。

要在客户端操作socket,可使用fsockopen、socket_create 或 stream_socket_client 等函数实现,如果是PHP5,推荐使用stream_socket_client。

socket交互应用实例:使用socket提交表单

新建一个 test.php 文件,向 提交表单数据,代码如下:
<?php
$data = array('comment'=>'this is a robot comment');
$data = http_build_query($data);

$out = "POST HTTP/1.1\r\n"; // 通过POST方式发送数据
$out .= "Host: demo.com\r\n";
$out .= "Content-type: application/x-www-form-urlencoded; charset=UTF-8\r\n";
$out .= "Content-length: ".strlen($data)."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:48.0) Gecko/20100101 Firefox/48.0"."\r\n";
$out .= "Connection: close"."\r\n"."\r\n"; // 注意:此处有两个 \r\n

$out .= $data."\r\n"; // 正文数据

$fp = fsockopen("demo.com", 80, $errno, $errstr, 30); // 创建socket客户端连接

// $fp = stream_socket_client("tcp://demo.com:80", $errno, $errstr, 30); 推荐这种写法

fwrite($fp, $out); // 向服务器发送数据

while (!feof($fp)) {
echo fgets($fp, 1280); // 读取服务器响应的数据
}
fclose($fp); // 关闭socket连接
?>需要注意以下几点:
fsockopen的第一个参数,也可以使用IP地址,不要带 字符串,除非使用SSL等
请求头(headers)不一定要带上所有的头域,一般只需带上几个核心的header即可
在最后一个header处,即 Connection 后有两个换行
注意编码问题

php的socket框架 workerman无法socket怎么办我爱编程网

PHP如何开启socket

如果你是windows系统,请进入安装目录,找到php.ini这个文件,找到下面一行。
找到extension=php_sockets.dll一句,将前面的;去掉
;是注释的意思。

如果你的Linux系统,重新编译,./configure --help,自己看去,相信你懂的,你也必须学着看这个了。想看看自己的php是否有这个拓展,使用php -m命令来看,如果有,就不用重新编译了。
--enable-sockets

以上就是我爱编程网为大家带来的php的socket框架 workerman无法socket怎么办,希望能帮助到大家,了解更多相关信息,敬请关注我爱编程网。
与“php的socket框架 workerman无法socket怎么办”相关推荐
socket框架php PHP如何开启socket
socket框架php PHP如何开启socket

PHP如何开启socket如果你是windows系统,请进入安装目录,找到php.ini这个文件,找到下面一行。找到extension=php_sockets.dll一句,将前面的;去掉;是注释的意思。如果你的Linux系统,重新编译,./configure--help,自己看去,相信你懂的,你也必须学着看这个了。想看看自己的php是否有这个拓展,使用php-m命令来看,如果有

2023-09-04 11:48:30
php框架搭建socket PHP如何开启socket
php框架搭建socket PHP如何开启socket

如何为php安装socket扩展为php安装socket扩展的方法:1、执行【make&amp;makeinstall】命令编译安装;2、编辑php.ini配置文件,开启【extension=sockets.so】;3、重启apache。首先编译安装(推荐教程:php视频教程)#cd/home/php5.2.1/ext/sockets#/server/php/bin/php

2023-09-12 02:24:05
socket通信与php框架 php为什么不适合socket
socket通信与php框架 php为什么不适合socket

web前端开发都有哪些常见框架结构?随着互联网的不断发展,越来越多的程序员都开始学习和掌握关于web前端开发的相关技术知识。今天,我们就一起来了解一下,web前端开发都有哪些常见框架需要我们了解和掌握的。一,socket通信说起web,肯定离不开tcp协议和http协议(https协议较为复杂,暂时不在本章讨论范围之内)。http协议在后面,那什么是tcp协议,cp协议就是网络

2023-09-21 17:39:29
php中好用的socket框架 PHP如何实现简单的Socket
php中好用的socket框架 PHP如何实现简单的Socket

如何为php安装socket扩展为php安装socket扩展的方法:1、执行【make&amp;makeinstall】命令编译安装;2、编辑php.ini配置文件,开启【extension=sockets.so】;3、重启apache。首先编译安装(推荐教程:php视频教程)#cd/home/php5.2.1/ext/sockets#/server/php/bin/php

2023-09-30 07:20:16
框架无法运行php php文件无法打开怎么办
框架无法运行php php文件无法打开怎么办

eclipse怎么无法运行php啊?eclipse是支持php的,如果安装的时候没有安装php插件的话,那么需要重新安装一下,其实,eclipse有一款是专门来开发php的叫eclipseforphp,建议用这种,方便快捷下面我说一下怎么配置eclipse支持phpPHPEclipse是Eclipse的一个插件,提供了包括PHP语法分析、运行、调试等功能的集成开发环境。

2023-09-08 09:55:46
socket通信与php框架 java socket 和php 怎样实现聊天功能,求帮忙
socket通信与php框架 java socket 和php 怎样实现聊天功能,求帮忙

php为什么不适合socket作为一名非底层程序员,要想深入了解socket的内部实现机制是很困难的,我们只需明白socket是一套操作系统封装好的实现进程通信的函数,会创建和调用就够了。PHP的语言特性和自身定位决定了它只适合做socket客户端,而不适合做socket服务器端。因为socket主要面向底层和网络服务开发,一般服务器端都是用C或Java等语言实现,这样能更好地操

2023-09-21 17:39:05
php框架所有模块无法加载 php无法加载扩展怎么办
php框架所有模块无法加载 php无法加载扩展怎么办

php无法加载扩展怎么办php无法加载扩展的解决办法:首先检查“php.ini”中的“extension_dir”的路径是否正确;然后在系统变量中加入“D:php5.5.38”;最后检查apache中的配置并进行修改即可。推荐:《PHP视频教程》在修改php.ini的时候会出现一些小问题导致扩展无法加载比如php.ini中明明开启了php_mysql.dll但是运行项目的时候却

2023-09-30 18:49:32
soket框架php php为什么不适合socket
soket框架php php为什么不适合socket

php为什么不适合socket作为一名非底层程序员,要想深入了解socket的内部实现机制是很困难的,我们只需明白socket是一套操作系统封装好的实现进程通信的函数,会创建和调用就够了。PHP的语言特性和自身定位决定了它只适合做socket客户端,而不适合做socket服务器端。因为socket主要面向底层和网络服务开发,一般服务器端都是用C或Java等语言实现,这样能更好地操

2023-09-03 17:46:57