是否有任何教程或指南显示如何在PHP中编写一个简单的websockets服务器?我试过在谷歌上寻找它,但我找不到很多.我发现phpwebsockets但它现在已经过时,不支持最新的协议.我自己尝试更新它,但它似乎不起作用.
#!/php -q
<?php /* >php -q server.php */
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
$master = WebSocket("localhost",12345);
$sockets = array($master);
$users = array();
$debug = false;
while(true){
$changed = $sockets;
socket_select($changed,$write=NULL,$except=NULL,NULL);
foreach($changed as $socket){
if($socket==$master){
$client=socket_accept($master);
if($client<0){ console("socket_accept() failed"); continue; }
else{ connect($client); }
}
else{
$bytes = @socket_recv($socket,$buffer,2048,0);
if($bytes==0){ disconnect($socket); }
else{
$user = getuserbysocket($socket);
if(!$user->handshake){ dohandshake($user,$buffer); }
else{ process($user,$buffer); }
}
}
}
}
//---------------------------------------------------------------
function process($user,$msg){
$action = unwrap($msg);
say("< ".$action);
switch($action){
case "hello" : send($user->socket,"hello human"); break;
case …Run Code Online (Sandbox Code Playgroud) 我试图运行这个简单的Python WebSocket,只做了一些非常小的改动.我正在运行Python 2.4.3,因为我不能使用更新的版本,但我不确定它有多重要.
这是我得到的错误:
Traceback (most recent call last):
File "socket.py", line 258, in ?
server = WebSocketServer("localhost", 8000, WebSocket)
File "socket.py", line 205, in __init__
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AttributeError: 'module' object has no attribute 'AF_INET'
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import time
import struct
import socket
import base64
import sys
from select import select
import re
import logging
from threading import Thread
import signal
# Simple WebSocket server implementation. Handshakes with the client then echos back everything
# that is received. Has …Run Code Online (Sandbox Code Playgroud) 我正在用PHP开发一个简单的websocket服务器.我知道有很多现有的实现,但我想自己做,以便更好地学习协议.我设法做握手罚款,我的客户连接到服务器.我还设法解码来自客户端的数据,但我发送回消息时遇到问题.客户端收到我的响应后会断开连接.Firefox说The connection to ws://localhost:12345/ was interrupted while the page was loading..
我用这个答案作为指导.
这是我的数据包装代码:
private function wrap($msg = ""){
$length = strlen($msg);
$this->log("wrapping (" . $length . " bytes): " . $msg);
$bytesFormatted = chr(129);
if($length <= 125){
$bytesFormatted .= chr($length);
} else if($length >= 126 && $length <= 65535) {
$bytesFormatted .= chr(126);
$bytesFormatted .= chr(( $length >> 8 ) & 255);
$bytesFormatted .= chr(( $length ) & 255);
} else {
$bytesFormatted .= chr(127);
$bytesFormatted …Run Code Online (Sandbox Code Playgroud) 如何使用PHP从服务器向客户端发送消息,避免无关的Ajax调用.
这是一个想法:
用户:Alice进行了一次更改,并将其发送到服务器.
然后,服务器检查哪些用户不是最新的,如果没有,则调用一些代码将与更改有关的信息发送给Bob(在这种情况下,谁不是最新的).
如何向Bob发送消息?
我需要在Java SE中实现一个相当简单的WebSocket服务器.它需要做的只是接受连接并存储相应的会话,然后在发出特定事件时向所有连接的客户端发送消息.
我找不到一个如何在常规Java SE中执行此操作的教程.所有这些都需要与Maven一起运行,或者将它部署为WAR - 这对于这个项目来说都是不可能的.我需要将其作为Java SE桌面应用程序运行.
该教程我发现展示了如何实现使用注释就像一个端点@OnOpen,@OnMessage和@OnClose.但是,它们都没有解释如何实际初始化服务器.我还需要能够为传入连接指定不同的端口号.
我错过了什么吗?我知道人们使用WebSocket制作聊天应用程序,而且真的不需要Web应用程序服务器.我也没有使用Maven,并且为了简单起见,我宁愿保持这种方式.
我写了一个简单的WebSocket客户端.我使用了我在SO上找到的代码,这里:我如何在服务器端发送和接收WebSocket消息?.
我正在使用Python 2.7,我的服务器echo.websocket.org在80TCP端口上.基本上,我认为接收消息时遇到问题.(或者也许发送错了?)
至少我确信握手没问题,因为我收到了很好的握手响应:
HTTP/1.1 101 Web Socket Protocol Handshake
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Headers: x-websocket-extensions
Access-Control-Allow-Headers: x-websocket-version
Access-Control-Allow-Headers: x-websocket-protocol
Access-Control-Allow-Origin: http://example.com
Connection: Upgrade
Date: Tue, 02 May 2017 21:54:31 GMT
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Server: Kaazing Gateway
Upgrade: websocket
Run Code Online (Sandbox Code Playgroud)
我的代码:
#!/usr/bin/env python
import socket
def encode_text_msg_websocket(data):
bytesFormatted = []
bytesFormatted.append(129)
bytesRaw = data.encode()
bytesLength = len(bytesRaw)
if bytesLength <= 125:
bytesFormatted.append(bytesLength)
elif 126 <= bytesLength <= 65535:
bytesFormatted.append(126)
bytesFormatted.append((bytesLength >> 8) …Run Code Online (Sandbox Code Playgroud) 我尝试在服务器端实现WebSocket帧解密算法(基于此:How can I send and receive WebSocket messages on the server side? )。这是我所得到的:
def decode(data):
frame = bytearray(data)
length = frame[1] & 127
indexFirstMask = 2
if length == 126:
indexFirstMask = 4
elif length == 127:
indexFirstMask = 10
indexFirstDataByte = indexFirstMask + 4
mask = frame[indexFirstMask:indexFirstDataByte]
i = indexFirstDataByte
j = 0
decoded = []
while i < len(frame):
decoded.append(frame[i] ^ mask[j%4])
i += 1
j += 1
print decoded
return "".join(chr(byte) for byte in decoded) …Run Code Online (Sandbox Code Playgroud) 我从头开始用java开发了一个websocket服务器。javascript 客户端在浏览器中运行:
function connectToServer() {
connection = new WebSocket("ws://" + document.domain + ":8351");
connection.onopen = function () {
};
connection.onmessage = function (e) {
handleServerResponse(e.data);
};
}
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到消息 (json) 达到 65535 字节。然后套接字被关闭(我还没有弄清楚,如果客户端或服务器关闭连接。
在浏览器控制台(尝试了多个浏览器)中,我看到: 加载页面时与 ws://localhost:8351/ 的连接被中断。
在服务器端,我看到: java.net.SocketException: Connection Reset at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
因此,如果问题出在握手中,或者我在服务器中错误地构建了框架,并且客户端关闭了连接,或者我将字节写入错误的流中,并且 java io 关闭了套接字。
我的代码(服务器):
1)握手(服务器响应)
String _01 = "HTTP/1.1 101 Switching Protocols\r\n";
String _02 = "Upgrade: websocket\r\n";
String _03 = "Connection: Upgrade\r\n";
String _04 = "Sec-WebSocket-Accept: " + responseKey + "\r\n";
String _05 = "Content-Encoding: identity\r\n";
Run Code Online (Sandbox Code Playgroud)
2)构建框架(大消息是否应该分解到不同的框架?) …