Heim php教程 php手册 关于PHP Websocket 错误: "stream_select(): You MUST reco

关于PHP Websocket 错误: "stream_select(): You MUST reco

Jun 13, 2016 am 09:43 AM
aspnet Softwareprogrammierung

最近在使用Ratchet (一个PHP websocket框架)改造一个PHP网站的时候,出现了错误:

"It is set to 1024, but you have descriptors numbered at least as high as 1266.

--enable-fd-setsize=2048 is recommended, but you may want to set it
to equal the maximum number of open files supported by your system"

经过几番周折,发现原因是PHP源代码将FD_SIZE设置为1024了,一旦超过1024个websocket连接,就会报这个错。网上的解决方案,基本上是修改PHP源代码,重新编译PHP. 但是个人认为修改PHP源代码的做法存在风险,故我提出了新的思路,并在项目中成功运用(欢迎拍砖)。

基本原理是在后台多开几个websocket服务进程,每个进程用不同的端口号。而前台js随机连接后台开放的websocket服务进程端口号。这样每个websocket服务进程有1024的可用连接数,根据网站的峰值连接数计算可得所需开的websocket服务进程数量,当然需要留些余量。这样不需要重新编译PHP源代码,也能够轻松突破PHP websocket 1024个连接数限制了。

 

后台的实现


写一个push-server.php作为websocket服务, push-server的实现可以参照Ratchet的例子, 但是需要稍微改造下,即可以输入port作为命令行参数。

$port = $argv[1];
if ($port == ""){
	$port = 40003; // 默认端口,如果启动push-server.php时不写参数,则使用40003端口
}
// .....省略其他代码 .....

// 将$port作为监听端口传入
$webSock->listen($port, '0.0.0.0');
Nach dem Login kopieren

  

根据需要,可以启动多个websocket进程,如:

php push-server 40003

php push-server 40004

php push-server 40005

这样后台就可以容许 1024 * 3 = 3072个websocket连接了。

前台的实现

随机获取连接服务的代码如下:

<span function</span><span  getWSServer() {
    </span><span var</span> serverPorts = ['40003', '40004', '40005'<span ];
    </span><span var</span> server = 'ws://youhost'<span ;
    </span><span var</span> randomPortIndex = Math.floor(Math.random() *<span  serverPorts.length);
    
    server </span>+= ':' +<span  serverPorts[randomPortIndex];
    
    </span><span return</span><span  server;
};</span>
Nach dem Login kopieren

当然你也可以根据自己需要,指定什么时候连接某个websocket服务,不再赘述。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Die Kombination von Vue.js und ASP.NET liefert Tipps und Anregungen zur Performance-Optimierung und Erweiterung von Webanwendungen. Die Kombination von Vue.js und ASP.NET liefert Tipps und Anregungen zur Performance-Optimierung und Erweiterung von Webanwendungen. Jul 29, 2023 pm 05:19 PM

Die Kombination von Vue.js und ASP.NET liefert Tipps und Vorschläge zur Leistungsoptimierung und Erweiterung von Webanwendungen. Mit der rasanten Entwicklung von Webanwendungen ist die Leistungsoptimierung zu einer unverzichtbaren und wichtigen Aufgabe für Entwickler geworden. Als beliebtes Front-End-Framework kann Vue.js in Kombination mit ASP.NET uns dabei helfen, eine bessere Leistungsoptimierung und -erweiterung zu erreichen. In diesem Artikel werden einige Tipps und Vorschläge vorgestellt sowie einige Codebeispiele bereitgestellt. 1. HTTP-Anfragen reduzieren Die Anzahl der HTTP-Anfragen wirkt sich direkt auf die Ladegeschwindigkeit von Webanwendungen aus. passieren

Zehn Möglichkeiten, wie generative KI die Softwareentwicklung verändern wird Zehn Möglichkeiten, wie generative KI die Softwareentwicklung verändern wird Mar 11, 2024 pm 12:10 PM

Übersetzer | Rezensiert von Chen Jun | Entsprechende integrierte Entwicklungsumgebungen (IDEs) wie Eclipse und Visual Studio können Programmierung, Entwicklung, Dokumentation, Konstruktion, Test, Bereitstellung und andere Schritte in einen vollständigen Softwareentwicklungslebenszyklus (SDLC) integrieren und so die Arbeit der Entwickler verbessern. In den letzten Jahren haben beliebte Cloud-Computing- und DevSecOps-Automatisierungstools die umfassenden Fähigkeiten von Entwicklern verbessert und es für mehr Unternehmen einfacher gemacht, Softwareanwendungen zu entwickeln, bereitzustellen und zu warten. Heute ist generative KI die Entwicklung der nächsten Generation

Nutzung und Optimierungstechniken des MySQL-Verbindungspools in ASP.NET-Programmen Nutzung und Optimierungstechniken des MySQL-Verbindungspools in ASP.NET-Programmen Jun 30, 2023 pm 11:54 PM

Wie verwende und optimiere ich den MySQL-Verbindungspool in ASP.NET-Programmen richtig? Einführung: MySQL ist ein weit verbreitetes Datenbankverwaltungssystem, das sich durch hohe Leistung, Zuverlässigkeit und Benutzerfreundlichkeit auszeichnet. Bei der ASP.NET-Entwicklung ist die Verwendung einer MySQL-Datenbank zur Datenspeicherung eine häufige Anforderung. Um die Effizienz und Leistung von Datenbankverbindungen zu verbessern, müssen wir den MySQL-Verbindungspool korrekt verwenden und optimieren. In diesem Artikel erfahren Sie, wie Sie den MySQL-Verbindungspool in ASP.NET-Programmen korrekt verwenden und optimieren.

Wie kann ich im ASP.NET-Programm erneut eine Verbindung zu MySQL herstellen? Wie kann ich im ASP.NET-Programm erneut eine Verbindung zu MySQL herstellen? Jun 29, 2023 pm 02:21 PM

Wie kann ich im ASP.NET-Programm erneut eine Verbindung zu MySQL herstellen? In der ASP.NET-Entwicklung wird häufig die MySQL-Datenbank verwendet. Aus Gründen des Netzwerks oder des Datenbankservers kann es jedoch manchmal zu Unterbrechungen oder einer Zeitüberschreitung der Datenbankverbindung kommen. In diesem Fall müssen wir die Verbindung wiederherstellen, nachdem die Verbindung getrennt wurde, um die Stabilität und Zuverlässigkeit des Programms sicherzustellen. In diesem Artikel erfahren Sie, wie Sie MySQL-Verbindungen in ASP.NET-Programmen wiederherstellen. Um zunächst auf die erforderlichen Namespaces zu verweisen, verweisen Sie diese am Anfang der Codedatei

Die Kombination von Vue.js und ASP.NET ermöglicht die Entwicklung und Bereitstellung von Anwendungen auf Unternehmensebene Die Kombination von Vue.js und ASP.NET ermöglicht die Entwicklung und Bereitstellung von Anwendungen auf Unternehmensebene Jul 29, 2023 pm 02:37 PM

Die Kombination von Vue.js und ASP.NET ermöglicht die Entwicklung und Bereitstellung von Anwendungen auf Unternehmensebene. Im heutigen sich schnell entwickelnden Bereich der Internettechnologie wird die Entwicklung und Bereitstellung von Anwendungen auf Unternehmensebene immer wichtiger. Vue.js und ASP.NET sind zwei Technologien, die in der Front-End- und Back-End-Entwicklung weit verbreitet sind. Ihre Kombination kann viele Vorteile für die Entwicklung und Bereitstellung von Anwendungen auf Unternehmensebene bringen. In diesem Artikel wird anhand von Codebeispielen erläutert, wie Sie mit Vue.js und ASP.NET Anwendungen auf Unternehmensebene entwickeln und bereitstellen. Zuerst müssen wir installieren

Wie konfiguriere und verwende ich den MySQL-Verbindungspool im ASP.NET-Programm richtig? Wie konfiguriere und verwende ich den MySQL-Verbindungspool im ASP.NET-Programm richtig? Jun 29, 2023 pm 12:56 PM

Wie konfiguriere und verwende ich den MySQL-Verbindungspool im ASP.NET-Programm richtig? Mit der Entwicklung des Internets und der Zunahme des Datenvolumens steigt auch der Bedarf an Datenbankzugängen und -verbindungen. Um die Leistung und Stabilität der Datenbank zu verbessern, ist Verbindungspooling zu einer wesentlichen Technologie geworden. In diesem Artikel wird hauptsächlich die korrekte Konfiguration und Verwendung des MySQL-Verbindungspools in ASP.NET-Programmen vorgestellt, um die Effizienz und Antwortgeschwindigkeit der Datenbank zu verbessern. 1. Das Konzept und die Funktion des Verbindungspoolings ist eine Technologie, die Datenbankverbindungen wiederverwendet.

Was sind die integrierten Objekte in Aspnet? Was sind die integrierten Objekte in Aspnet? Nov 21, 2023 pm 02:59 PM

Zu den integrierten Objekten in ASP.NET gehören „Request“, „Response“, „Session“, „Server“, „Application“, „HttpContext“, „Cache“, „Trace“, „Cookie“ und „Server.MapPath“: 1. Anfrage, Angabe der vom Client ausgegebenen HTTP-Anfrage; 2. Antwort: Angabe der vom Webserver zurückgegebenen HTTP-Antwort Kunde usw.

Empfohlene Konfiguration für die ASP.NET-Entwicklung mit Visual Studio unter Linux Empfohlene Konfiguration für die ASP.NET-Entwicklung mit Visual Studio unter Linux Jul 06, 2023 pm 08:45 PM

Überblick über die empfohlene Konfiguration für die Verwendung von Visual Studio für die ASP.NET-Entwicklung unter Linux: Mit der Entwicklung von Open-Source-Software und der Popularität des Linux-Betriebssystems beginnen immer mehr Entwickler, ASP.NET unter Linux zu entwickeln. Als leistungsstarkes Entwicklungstool nimmt Visual Studio seit jeher eine dominierende Stellung auf der Windows-Plattform ein. In diesem Artikel wird erläutert, wie Sie VisualStudio für ASP.NE unter Linux konfigurieren

See all articles