PHP游戏服务器,多个TCP客户端?
我正在制作基于网络浏览器的多人游戏.我已经确定,鉴于其实时性质,Websocket是处理通信的最佳方法.客户使用HTML5画布渲染游戏和Websocket与主机进行通信. 我选择使用PHP托管游戏,因为托管提供商似乎首选.我以前从未使用过PHP,但是在Java中使用Websocket做了类似的事情,但是很大程度上依靠多线程. 我一直在与多个客户端的PHP插座上查看一些教程;但是,他们中的大多数人都会为每个客户提供新的过程.由于我会不断运行的游戏循环,所以我认为这是不合适的. 我要实现的方法是将端口连接时分配端口,聆听新客户端,与当前客户端列表交换数据并一起运行游戏循环. 我需要帮助的地方是: 如何找到和分配端口给新客户,通知客户端口,并在断开连接时将其清理. 如何在不阻止游戏循环的情况下执行上述和所有其他插座交易.在部分块中接受客户的消息并仅采取完整消息是可以接受的. 谁能给我一些有关如何实现这些目标的技术建议? 我认为这看起来不是太多要问PHP,但
0 2023-05-30
编程技术问答社区
如何在CodeIgniter 3中连接到PostgreSQL?
我试图使用CodeIgniter Framework连接到PostgreSQL. 现在在我的 database.php 中 我有以下代码: $active_group = 'default'; $query_builder = TRUE; $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => '', 'database' => 'fmsdb', 'dbdriver' => 'postgre', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => ''
0 2023-05-30
编程技术问答社区
PHP插座 - 接受多个连接
我正在尝试创建一个简单的客户端/服务器应用程序,因此我正在尝试使用PHP中的插座. 现在我有一个简单的C#客户端,可以很好地连接到服务器,但是我只能一次将一个客户端连接到此服务器(我在线找到了此代码示例,并为测试目的进行了一些调整). 有趣的是,我在这里基于同一示例找到了同样的问题: https://stackoverflow.com/questions/10318023/php-socket-connections-cant-handle-multiple-connection 我试图理解它的每个部分,并且接近查看它的工作方式,但是由于某种原因,当我连接第二个客户端时,第一个客户会断开/崩溃. 谁能给我一些疯狂的想法或指向我应该看的地方?
0 2023-05-30
编程技术问答社区
在UNIX套接字与TCP/IP套接字上运行PHP-FPM的区别是什么?
有两种运行PHP-FPM的方法.我知道技术上没有任何防弹,但是这两种方法的利弊是什么? 解决方案 差异主要是使用完整的网络堆栈来"包"和"解开"每个数据的附加开销. 请注意,大多数部署的开销可以忽略不计 使用套接字( 您可以选择一起水平缩放前端和后端(假设您正在构建一个带有两者的容器,并且可以创建更多的容器,每个容器都有一个工作对)或 您唯一的选择是垂直缩放您使用的一个"框"(例如,添加更多CPU,RAM等) 使用TCP连接(例如,Listic = 127.0.0.1:9000)如果您想解开前面和后端,例如,如果您决定通过拥有的情况来扩展您的环境一个接收连接并通过网络将作品传递到PHP-FPM盒子群 的单个NGINX 每个环境都是不同的,因此,一如既往,唯一真正的选项是从看起来正确,负载测试并继续测量性能的一个设置开始,因此您可以随着负载需求的发展(通常,通常,您要选择一个更便宜或更易于维护的方法,因为两者都是扎实的,经过战斗的方法)
2 2023-05-30
编程技术问答社区
如何保持Php stream_socket的活力?
我使用stream_socket_client()有一个PHP应用程序,可以从后端服务器通过TCP获取数据,但希望将连接保持在池中甚至更好的地方,或者在池中或其他东西,以避免在头上连接/断开连接. 但我不是PHP大师,所以我不知道该怎么做.尽管我可能会在几个小时内弄清楚,但我的时间可能会更好地花在每个人的大脑上,所以有任何建议吗? 解决方案 在流创建时设置STREAM_CLIENT_PERSISTENT标志可以防止连接闲置.在内部,标志stream_socket_client()呼叫pfsockopen()( doc )而不是fsockopen()( doc ). 连接持久性仅限于服务器进程.连接已打开.当您的脚本结束时,您再次致电,可能无法保证同一过程处理您的请求 - 在这种情况下,将打开另一个连接.将连接放入$_SESSION以共享它将不起作用.
0 2023-05-28
编程技术问答社区
TCP连接通过使用套接字返回错误结果
这是我使用的代码,无论是否打开. 有人可以尝试修复它吗?似乎无法正常工作,即使端口关闭,代码始终返回"成功连接" 这是我使用端口80 对其进行了测试的IP列表 79.142.126.3 //Connection refused 222.165.195.103 //Connection refused 64.75.193.162 //Connection refused 118.97.197.146 //Port is open 222.134.154.103 //Connection timed out 173.0.59.170 //Port is open 这是输出: 5 sockets connected successfully 79.142.126.3 connected successfully 222.165.195.103 connected successfully 64.75.193.162 connected successfully 1
0 2023-05-28
编程技术问答社区
在PHP的Web服务器?
即,在发送HTTP请求时,将Apache替换为PHP应用程序,该应用程序发送回HTML文件? 这有多实用? 解决方案 已经完成了,但是如果您想知道它的实用性,那么我建议您安装和测试Apache台以查看结果: http://nanoweb.si.kz/ Edit, A benchmark from the site: Server Software: aEGiS_nanoweb/2.0.1-dev Server Hostname: si.kz Server Port: 80 Document Path: /six.gif Document Length: 28352 bytes Concurrency Level: 20 Time taken for tests: 3.123 seconds Complete requests: 500 Failed r
0 2023-05-27
编程技术问答社区
PHP插座架响应需要永远
我想通过EPP Protocole向注册服务商发送XML请求并获得响应,该连接成功,但是当我到达fread($fp)>时,它需要永远加载. 有没有办法使其快速并从注册商那里得到回应? 我正在使用主机插件中的代码. /** open socket* */ $fp = fsockopen("tcp://registrarwebsite.com", 700, $errno, $errstr, 200); stream_set_blocking($fp, true); stream_context_set_option($fp, 'ssl', 'verify_host', true); stream_context_set_option($fp, 'ssl', 'verify_peer', true); stream_context_set_option($fp, 'ssl', 'allow_
4 2023-05-27
编程技术问答社区
用PHP扩展IPv6地址的快速方法
我正在研究一个需要扩展IPv6地址的项目.其他用户创建的功能并不多,并且存在的功能很丑陋.其中一些包括多个foreach和gmp_init,它们增加了很多开销,并且更难维护代码.我需要一个简单的,非税的脚本来扩展IPv6. 将其发布给社区. 解决方案 以下是两个衬里,其中$ip是一个冷凝的IPv6地址.返回扩展$ip. 示例: $ip = "fe80:01::af0"; echo expand($ip); // fe80:0001:0000:0000:0000:0000:0000:0af0 功能: function expand($ip){ $hex = unpack("H*hex", inet_pton($ip)); $ip = substr(preg_replace("/([A-f0-9]{4})/", "$1:", $hex['hex']), 0, -1); return $ip; } 其他解决方案
2 2023-05-27
编程技术问答社区
如何用PHP监听TCP端口?
我有一个GPS跟踪器,该跟踪器将数据连接并将数据发送到定义的公共服务器:通过GPRS连接端口. 我可以定义IP:GPS设备的端口 我的问题是,我可以在服务器中打开一个端口,然后收听/保存使用PHP收到的数据? 谢谢. 解决方案 编辑/更新2017年8月16日: 用户和库作者评论说,他发布了我的原始答案中代码的新的,更新的版本. 在他的github上的新代码的链接.请随时探索新代码,并在此处参考原始示例以获取Insight(我没有个人探索/使用新代码). 以下代码将使用SocketServer.class.php文件.它本来是作为独立过程运行的,这意味着在Linux I下必须使文件可执行,然后使用" PHP MY_SERVER.PHP"从命令行运行. 有关从命令行运行PHP脚本的更多信息: http://www.funphp.com/?p=33 首先在此处获取socketserver.class.php文件: http://www.phpclasses
0 2023-05-26
编程技术问答社区
我怎样才能在Perl中接受多个TCP连接?
我对Linux的Perl脚本有问题.它的主要目的是在3个应用程序之间成为中间人.它应该做什么: 它应该能够在$udp_port 上等待UDP文本(无空格) 当它收到UDP文本时,它应该将其转发给连接的TCP客户端 问题是我的应用当前工作直到我第一次与TCP客户端断开连接为止.然后,我将无法再连接到它,并且它在$udp_port上接收下一个UDP数据包后就淘汰了.因此,基本上,每当我想与TCP重新连接时,我都必须重新启动应用程序. 所有这些都应尽可能快(每毫秒计数).发送到UDP或TCP的文本不包含空格.不必一次支持多个TCP客户端,但这肯定是优势: - ) 这是我当前的代码: #!/usr/bin/perl use strict; use warnings; use IO::Socket; use Net::hostent; use threads; use threads::shared; my $tcp_port = "10008"; # con
0 2023-05-24
编程技术问答社区
TCP、HTTP和多线程甜蜜点
我正在尝试了解我得到的性能号码以及如何确定线程的最佳数量. 有关我的结果,请参见这篇文章的底部 我在perl中写了一个实验性的多线程Web客户端,该网络下载一个页面,获取每个图像标签的源,然后下载图像 - 丢弃数据. 它使用一个非阻滞连接,每次文件超时为10秒,每次超时并重试时会加倍.它还缓存IP地址,因此每个线程只需进行一次DNS查找. 下载的数据总数为1316个文件中的2271122字节,通过2.5Mbit连接,来自 http://hubblesite.org/gallery/album/entire/npp/npp/all/hires/true/.缩略图图像由一家声称专门用于高带宽应用的公司托管. 壁时间是: 1线程4:48-0超时 2个线程为2:38-0超时 5个线程为2:22-20超时 10个线程2:27-40超时 50个线程2:27-170超时 在最坏的情况下(50个线程),客户端少于2秒的CPU时间被客户消费. avg
2 2023-05-24
编程技术问答社区
如何调整TCP的高性能单向传输?
我的(网络)客户端每200ms向我的服务器发送50至100 KB数据包.最多有300个客户.服务器什么也没发送给客户端.服务器(专用)和客户端位于LAN.如何调整TCP配置以提高性能? Windows Server 2003或2008上的服务器,Windows 2000及以上的客户端. 例如. TCP窗口大小.更改此参数有帮助吗?还要别的吗?任何特殊的插座选项? [edit]:实际上,在不同模式中,数据包最多可高于5MB 解决方案 我几年前对此进行了研究,WTH 1700个数据点.结论是,您可以做的单一最好的事情是在接收器处配置一个巨大的插座接收缓冲区(例如512k).对侦听套接字执行此操作,因此它将被接受的插座继承,因此在握手时已经设置了它.这反过来允许在握手期间协商TCP窗口缩放,这使客户可以了解窗口大小> 64K.巨大的窗口尺寸基本上使客户以最大可能的速度传输,仅在拥塞中避免而不是封闭的接收窗户. 其他解决方案 什么操作系统? IPv4还是V6? 为什么
2 2023-05-24
编程技术问答社区
netty中由于将请求从boss线程传递到工作线程而导致的延迟?
我对Netty(服务器端),TCP/IP应用程序有一些疑问; 我想知道是否会因为Netty(由于缺少配置等)而有潜伏期,而将请求从Boss线程传递给Worker线程? 我正在使用: new OrderedMemoryAwareThreadPoolExecutor(350, 0, 0, 1, TimeUnit.SECONDS); 实际上,我设置了最大线程计数350,因为我不确定最佳数字.我每分钟都同时记录工作线程数,而且似乎平均值太低(勉强超过10).因此,由于不需要,我将减少这个数字. 还有其他参数,我应该意识到要获得最佳性能的重要点? bootstrap.setOption("tcpNoDelay", true); - 设置此参数是否有缺点?考虑到交货时间非常重要. 线程池执行程序: OrderedMemoryAwareThreadPoolExecutor executor = new OrderedMemoryAwareThreadPoo
2 2023-05-23
编程技术问答社区
如何在不嗅探的情况下测量TCP/IP开销?
我想知道是否有一种程序化方法可以获取通过TCP流发送数据时使用的完整带宽的度量.由于我似乎不知道网络堆栈如何将流分为数据包,或者当它发送TCP SYN或ACK或它在您的后台所做的许多事情时,我只能对此进行粗略的估计. 我唯一能想到的解决方案是真正嗅到界面,但我想堆栈已经可以为我收集此统计数据. 这是在Windows或Linux下在Java中运行的(当然,可以使用便携式解决方案),但是我可以Jni-izie c/c ++答案,以便(和OS API调用)也是一个很好的答案.谢谢! 解决方案 [Windows特定答案] 在Windows上,您可以考虑查看ETW(Windows的事件跟踪).通常,ETW是用于在Windows上提供跟踪/记录信息的技术,大多数Microsoft软件已经与您可以使用的ETW提供商进行了仪器.就您而言,我认为Microsoft-Windows-TCPIP提供商具有可能对您有帮助的信息(例如本地/远程地址和端口,操作,已发送/接收的字节等).
12 2023-05-23
编程技术问答社区
Indy写缓冲/高效的TCP通信
我知道,我在问很多问题...但是作为新的Delphi开发人员,我一直在所有这些问题上陷入困境:) 这个人使用Indy 10处理了TCP通信.为了使通信高效,我将客户端操作请求编码为单个字节(在大多数情况下,当然还有其他数据字节,但在这种情况下,只有一个单个字节).问题是 var Bytes : TBytes; ... SetLength (Bytes, 1); Bytes [0] := OpCode; FConnection.IOHandler.Write (Bytes, 1); ErrorCode := Connection.IOHandler.ReadByte; 不会立即发送该字节(至少无法调用服务器执行处理程序).如果我将" 1"更改为" 9",例如,一切正常.我以为Indy缓冲传出字节,并试图禁用Write Buffering FConnection.IOHandler.WriteBufferClose; ,但这无济于事.如何发送单个字节并确保立即发送?
2 2023-05-23
编程技术问答社区
为什么当工作交错进行时,TCP的写延迟会变差?
我一直在介绍TCP延迟(特别是从用户空间到小消息的内核空间的write),以便获得write> write的延迟的直觉(确认这可以是上下文 - 具体的).我注意到对我来说似乎相似的测试之间存在很大的不一致,我很好奇地弄清楚区别的来源.我知道微结构可能是有问题的,但是我仍然觉得我缺少一些基本的理解(因为延迟差异为〜10x). 设置是我有一个C ++ TCP服务器,该服务器接受一个客户端连接(从同一CPU上的另一个进程),并且与客户端连接后,将20个系统调用到插座,发送一个字节一次.服务器的完整代码在本文末尾复制.这是使用boost/timer每个write的输出(添加〜1 MIC的噪声): $ clang++ -std=c++11 -stdlib=libc++ tcpServerStove.cpp -O3; ./a.out 18 mics 3 mics 3 mics 4 mics 3 mics 3 mics 4 mics 3 mics 5 mics 3 mics ... 我
2 2023-05-23
编程技术问答社区
我怎样才能测量我的服务器代码的性能和TCP RTT?
我创建了一个基本的TCP服务器,该服务器以协议缓冲区格式读取传入的二进制数据,并将二进制MSG写为响应.我想基准在往返时间. 我尝试了IPERF,但无法使其多次发送相同的输入文件.是否有另一个基准工具可以反复发送二进制输入文件? 解决方案 如果您可以访问Linux或Unix Machine 1 ,则应使用 tcptrace .您需要做的就是在使用 wireshark 或拥有.pcap文件 2 后,用tcptrace -xtraffic 3 分析.这将生成两个文本文件,该PCAP中所有连接的所有连接的平均RTT统计信息在一个称为traffic_stats.dat的底部显示. . [mpenning@Bucksnort tcpperf]$ tcptrace -xtraffic willers.pcap mod_traffic: characterizing traffic 1 arg remaining, starting with 'wil
0 2023-05-23
编程技术问答社区
为什么TCP套接字如果在多个系统调用中完成会变慢?
为什么以下代码慢?慢速我的意思是100x-1000x慢.它只是在TCP插座上反复执行读/写入.奇怪的是,只有在我使用两个函数调用读写和写入时,它仍然保持速度,如下所示.如果我更改服务器或客户端代码以使用单个函数调用(如注释中),它将变得非常快. 代码段: int main(...) { int sock = ...; // open TCP socket int i; char buf[100000]; for(i=0;i
0 2023-05-23
编程技术问答社区
TCP接收窗口大小高于net.core.rmem_max
我正在运行iperf两个服务器之间的测量,通过10Gbit链接连接.我正在尝试将观察到的最大窗口大小与系统配置参数相关联. 特别是,我已经观察到最大窗口大小为3 MIB.但是,我找不到系统文件中的相应值. 通过运行sysctl -a我得到以下值: net.ipv4.tcp_rmem = 4096 87380 6291456 net.core.rmem_max = 212992 第一个值告诉我们,最大接收器窗口大小为6 MIB.但是,TCP倾向于分配所需尺寸的两倍,因此最大接收器窗口大小应为3 MIB,完全按照我的测量.来自man tcp: 请注意,TCP实际上分配了SetSockopt(2)呼叫中请求的缓冲区大小的两倍,因此,接下来的Getsockopt(2)呼叫不会返回与SetSockopt(2)调用中要求的缓冲区大小相同的缓冲区大小. TCP用于管理目的和内部内核结构,/proc文件值与实际的TCP窗口相比,/proc文件值反映了较大的尺
0 2023-05-23
编程技术问答社区