php是否合适做socket
做一个网页聊天室(irc服务器)
php的socket是否可以胜任?ajax方法除外
如果php 的socket可以做 他可以支持多大的链接呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
做一个网页聊天室(irc服务器)
php的socket是否可以胜任?ajax方法除外
如果php 的socket可以做 他可以支持多大的链接呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(20)
php的socket不适合。。。
+1
用ab压localhost -n 10000 -c 200
php5.4(select) Requests per second: 2.91 [#/sec] (mean)
nodejs v0.8.8 Requests per second: 5935.41 [#/sec] (mean)
test.php <?php use SwooleNetworkProtocolAppServer; require('vendor/autoload.php'); $AppSvr = new AppServer(); PHP Warning: require_once(LIBPATH/function/cli.php): failed to open stream
和swoole扩展对比做下压力测试吧,
可以做的。只是问题会相对多些。如前面所言会偶尔断开。与操作系统也有关。记得最终用的SUSE的服务器版本。如果可能可以借助其实语言实现SOCKET,之后PHP使用数据。如果,必须要用这种方式,只能是做好监控及应急办法。
就因为问题多 所以和忌讳用php 的socket 打算用python做
php适合拼字符串
php 可以写 socket服务器...不过确实不适合..
网页聊天应该没什么太大问题的..单进程 撑个千把人肯定没问题..
不过php因为是阻塞式的..而且只能单线程 去处理.. 所以当有类似 有N个人同时向另外几千人
同时广播消息时,延迟可能会非常大..
单纯单用户对单用户的聊天应问题不大的
php本来就是和c一样使用相同的套接字接口,只不过封闭了一下。
露怯了。大部分语言的函数都是C一致。网络、操作系统、数据库……的接口都是c style的。 如果你用c连接过mysql的,函数都是一样的。
靠,不小心憋了一眼楼主的代码,才发现,原来PHP和C的SOCKET部分惊人的相似。
php就不是主要做socket开发的 老板莫名其妙的需求 抓狂.......
@iranw 代替的方法只能轮询了
把套接字通信写在死循环中,并且要判断套接字是否断开,断开要重新连接 while(TRUE){ }
不适合。。。经常莫名其妙的就断了
<?php
$port
=
9050
;
// create a streaming socket, of type TCP/IP
$sock
=
socket_create
(
AF_INET
,
SOCK_STREAM
,
SOL_TCP
);
// set the option to reuse the port
socket_set_option
(
$sock
,
SOL_SOCKET
,
SO_REUSEADDR
,
1
);
// "bind" the socket to the address to "localhost", on port $port
// so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
socket_bind
(
$sock
,
0
,
$port
);
// start listen for connections
socket_listen
(
$sock
);
// create a list of all the clients that will be connected to us..
// add the listening socket to this list
$clients
= array(
$sock
);
while (
true
) {
// create a copy, so $clients doesn't get modified by socket_select()
$read
=
$clients
;
// get a list of all the clients that have data to be read from
// if there are no clients with data, go to next iteration
if (
socket_select
(
$read
,
$write
=
NULL
,
$except
=
NULL
,
0
) <
1
)
continue;
// check if there is a client trying to connect
if (
in_array
(
$sock
,
$read
)) {
// accept the client, and add him to the $clients array
$clients
[] =
$newsock
=
socket_accept
(
$sock
);
// send the client a welcome message
socket_write
(
$newsock
,
"no noobs, but ill make an exception :)n"
.
"There are "
.(
count
(
$clients
) -
1
).
" client(s) connected to the servern"
);
socket_getpeername
(
$newsock
,
$ip
);
echo
"New client connected:
{
$ip
}
n"
;
// remove the listening socket from the clients-with-data array
$key
=
array_search
(
$sock
,
$read
);
unset(
$read
[
$key
]);
}
// loop through all the clients that have data to read from
foreach (
$read
as
$read_sock
) {
// read until newline or 1024 bytes
// socket_read while show errors when the client is disconnected, so silence the error messages
$data
= @
socket_read
(
$read_sock
,
1024
,
PHP_NORMAL_READ
);
// check if the client is disconnected
if (
$data
===
false
) {
// remove client for $clients array
$key
=
array_search
(
$read_sock
,
$clients
);
unset(
$clients
[
$key
]);
echo
"client disconnected.n"
;
// continue to the next client to read from, if any
continue;
}
// trim off the trailing/beginning white spaces
$data
=
trim
(
$data
);
// check if there is any data after trimming off the spaces
if (!empty(
$data
)) {
// send this to all the clients in the $clients array (except the first one, which is a listening socket)
foreach (
$clients
as
$send_sock
) {
// if its the listening sock or the client that we got the message from, go to the next one in the list
if (
$send_sock
==
$sock
||
$send_sock
==
$read_sock
)
continue;
// write the message to the client -- add a newline character to the end of the message
socket_write
(
$send_sock
,
$data
.
"n"
);
}
// end of broadcast foreach
}
}
// end of reading foreach
}
// close the listening socket
socket_close
(
$sock
);
?>
有同感 老板如此需求 无奈中......
不适合。
php 做socket没有问题,看下http://www.workerman.net,它是用php socket 写的一个服务器,性能很强悍