我计划尝试使用 html5 和 node.js 进行实时游戏开发。我之前制作了一个游戏,使用轮询来模拟游戏中的实时更新。我的实时游戏将使用 AJAX 来保持游戏在多个客户端之间同步。基本上,每当游戏状态发生变化时,我都会更新相关数据库行中的 Last_updated 字段。每当客户端轮询服务器时,它都会检查自上次轮询返回任何相关更新以来发生的任何更新(通过将先前轮询时间与 last_updated 字段进行比较来执行此操作)。
在我的游戏新版本中,我使用了node.js(和网络套接字),我想避免这样的机制,我必须不断搜索数据库以查找是否有更新。我想知道是否有其他方法可以存储重要的游戏状态信息,而无需以这种方式使用数据库。
我真的希望能够设置事件在游戏状态更改时在所有客户端上触发,而不必不断检查更改,因为这将节省大量的处理/查询。我真的不知道在一个客户端上触发的事件是否可以发送到也连接到我的 node.js 运行服务器的其他客户端。我一直使用数据库来完成这类事情,但我真的希望还有其他更好的选择?
干杯,乔什
我是 XMPP 的新手。我想将它用于我的聊天应用程序,该应用程序可以通过网络和移动设备访问。我搜索了很多有关 XMPP 后台工作的信息,但找不到很清楚的信息。XMPP的实际作用是什么?XMPP 不是用于传输数据的协议,因为它使用 BOSH 或 Websockets,XMPP 不是用于存储数据,因为许多服务器端实现都使用外部数据库。那么聊天过程中XMPP到底在做什么呢?
我想要一个简单的套接字连接,服务器应该告诉客户端连接总数(每当连接发生时),客户端应该更新 DOM。出于这样一个简单的原因,我觉得 socket.io 或任何其他库的功能太全了。知道如何在没有图书馆的情况下做到这一点吗?
我创建了一个 PHP websocket 服务器并与一个 webbrowser 连接到它。一切正常。现在我想将一些 cookie 信息发送到 websocket 服务器,但 cookie 并从不与标头一起发送。我真的不知道为什么 cookie 不包含在请求标头中。(在 index.php 中使用 php 回显时,cookie 已设置且不为空)
这是请求和响应头
要求
GET ws://127.0.0.1:9000/chat HTTP/1.1
Host: 127.0.0.1:9000
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: 2nR9SZYdLOG32fpV6eJ/wA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Run Code Online (Sandbox Code Playgroud)
回复
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: QecMAdsem/PYww1pYkyjD+79OmM=
Run Code Online (Sandbox Code Playgroud)
握手
// do handyshake: (hybi-10)
$secKey = $headers['Sec-WebSocket-Key'];
$secAccept …Run Code Online (Sandbox Code Playgroud) 我有一个节点服务器 (Meteor.js),它应该使用 websockets 与另一台服务器进行通信。由于通信是在不涉及直接用户的服务器之间进行的,因此我选择使用自签名证书。
从节点服务器(这是一个客户端到另一个服务器)在哪里添加证书参数
var soc = new WebSocket("wss://localhost:9000")
Run Code Online (Sandbox Code Playgroud)
我已经测试过在不安全模式下通过认证进行连接,它工作正常。
var soc = new WebSocket("ws://localhost:9000")
Run Code Online (Sandbox Code Playgroud)
将证书添加到应用程序后,以安全模式从 android 应用程序连接也可以正常工作。
我有这个服务器
我想使用以下代码连接到服务器:
ws = create_connection("wss://127.0.0.1:9000")
Run Code Online (Sandbox Code Playgroud)
我需要添加哪些选项create_connection?添加sslopt={"cert_reqs": ssl.CERT_NONE}不起作用:
websocket._exceptions.WebSocketBadStatusException: Handshake status 400
Run Code Online (Sandbox Code Playgroud) 我正在编写一些 websocket 代码,到目前为止我有这个:
window.onload = function() {
// Get references to elements on the page.
var form = document.getElementById('message-form');
var messageField = document.getElementById('message');
var messagesList = document.getElementById('messages');
var socketStatus = document.getElementById('status');
var closeBtn = document.getElementById('close');
var socket = new WebSocket('ws://echo.websocket.org');
// Show a connected message when the WebSocket is opened.
socket.onopen = function(event) {
socketStatus.innerHTML = 'Connected to: ' + event.currentTarget.url;
socketStatus.className = 'open';
};
// Handle any errors that occur.
socket.onerror = function(error) {
console.log('WebSocket Error: ' + error); …Run Code Online (Sandbox Code Playgroud) 当我运行我的项目时,我收到一个异常错误,但它没有明确的消息。我只有这种主体错误
我可以访问 websocket 管理页面,http://127.0.0.1:8000/laravel-websockets但是当我去的时候http://127.0.0.1:8000/出现以下错误。
The following error was encountered while trying to retrieve the URL: http://127.0.0.1:6001/apps/995591/events?
Connection to 127.0.0.1 failed.
The system returned: (111) Connection refused
The remote host or network may be down. Please try the request again.
Generated Tue, 05 May 2020 17:12:03 GMT by proxyserversetup-s-1vcpu-1gb-sgp1-07 (squid/3.5.27)
Run Code Online (Sandbox Code Playgroud)
我从这个链接中关注了文档中的每一件事
这是我的一些配置
广播.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' …Run Code Online (Sandbox Code Playgroud) 我将 WebSocket ApiGateway 与 AWS Lambda 集成一起使用。当我尝试使用Lambda 函数的post_to_connection方法将数据发布到客户端时,boto3.client('apigatewaymanagementapi')总是超时而没有任何错误消息。只有超时消息会记录在 CloudWatch 中:
3.00 秒后任务超时
我的代码:
import json
import boto3
import time
import urllib
api_client = boto3.client('apigatewaymanagementapi')
def lambda_handler(event, context):
connectionId = event['requestContext']['connectionId']
api_client.post_to_connection(ConnectionId=connectionId, Data=json.dumps({'test': '1'}))
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在开发一个实时 websocket 应用程序,其中服务器使用 .Net 核心进行编码,而客户端可以使用多种不同的语言。我决定保护服务器的方式是 JWT,即只接受来自具有有效 JWT 的请求的套接字连接。我可以用 .Net 客户端成功地做到这一点,这是我的代码:
_client = new WebSocket("ws://localhost:8080/api/SocketDock","",null,new List<KeyValuePair<string, string>>()
{ new KeyValuePair<string, string>(
"Authorization", "Bearer eyJhbGciOiJIUzI1.....")
});
Run Code Online (Sandbox Code Playgroud)
这与 .net 核心客户端 websocket 完美配合。但是,我无法对 Angular 客户端做同样的事情。我以某种方式浏览了几篇文章,最终得到了不可能的答案。然而,在我看来,如果协议或握手在一种语言中是可能的,那么在其他语言中也必须是可能的。
有人可以指导我以正确的方式与任何 Angular 客户端实现相同的目标吗?