php是否合适做socket

发布于 2021-11-22 06:52:35 字数 94 浏览 946 评论 20

做一个网页聊天室(irc服务器)

php的socket是否可以胜任?ajax方法除外

如果php 的socket可以做 他可以支持多大的链接呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(20

命硬 2021-11-26 01:13:08

php的socket不适合。。。

眼眸 2021-11-26 01:13:08

用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)

少女净妖师 2021-11-26 01:13:08

test.php <?php use SwooleNetworkProtocolAppServer; require('vendor/autoload.php'); $AppSvr = new AppServer(); PHP Warning: require_once(LIBPATH/function/cli.php): failed to open stream

一笔一画续写前缘 2021-11-26 01:13:08

和swoole扩展对比做下压力测试吧,

少女情怀诗 2021-11-26 01:13:07

可以做的。只是问题会相对多些。如前面所言会偶尔断开。与操作系统也有关。记得最终用的SUSE的服务器版本。如果可能可以借助其实语言实现SOCKET,之后PHP使用数据。如果,必须要用这种方式,只能是做好监控及应急办法。

谢绝鈎搭 2021-11-26 01:13:07

就因为问题多 所以和忌讳用php 的socket 打算用python做

想挽留 2021-11-26 01:13:07

php适合拼字符串

反话 2021-11-26 01:13:07

php 可以写 socket服务器...不过确实不适合..

网页聊天应该没什么太大问题的..单进程 撑个千把人肯定没问题..

不过php因为是阻塞式的..而且只能单线程 去处理.. 所以当有类似 有N个人同时向另外几千人

同时广播消息时,延迟可能会非常大..

单纯单用户对单用户的聊天应问题不大的

柠檬 2021-11-26 01:13:06

php本来就是和c一样使用相同的套接字接口,只不过封闭了一下。

白龙吟 2021-11-26 01:12:33

露怯了。大部分语言的函数都是C一致。网络、操作系统、数据库……的接口都是c style的。 如果你用c连接过mysql的,函数都是一样的。

冷默言语 2021-11-26 01:12:10

靠,不小心憋了一眼楼主的代码,才发现,原来PHP和C的SOCKET部分惊人的相似。

命硬 2021-11-26 01:10:20

php就不是主要做socket开发的 老板莫名其妙的需求 抓狂.......

落墨 2021-11-26 01:06:58

@iranw 代替的方法只能轮询了

夜血缘 2021-11-26 01:04:40

把套接字通信写在死循环中,并且要判断套接字是否断开,断开要重新连接 while(TRUE){ }

等风来 2021-11-26 01:01:48

不适合。。。经常莫名其妙的就断了

陌上芳菲 2021-11-26 00:18:57

<?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
);
?>

情痴 2021-11-25 22:32:43

有同感 老板如此需求 无奈中......

挽清梦 2021-11-25 20:24:49

不适合。

疾风者 2021-11-25 09:09:36

php 做socket没有问题,看下http://www.workerman.net,它是用php socket 写的一个服务器,性能很强悍

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文