javascript - 使用 Ratchet 和 CakePHP 创建一个 Web Socket 服务器
问题描述
Xampp 在这里控制我的本地虚拟主机进行测试。我正在尝试让棘轮正常工作并正确创建 Web 服务器。问题是当我告诉系统转到 JS 中的 Web 套接字主机地址时,系统没有响应。
我知道我希望该地址等于当前地址。我将把它放在请求中,以便 JS 知道它是什么,但现在让我们说它 local.ezbusinessmanager.com 作为基本域,我将 Web 套接字服务器的端口设置为 8080。我有在名为 ChatServerCommand 的命令对象中执行此操作。
/**
* Implement this method with your command's logic.
* This starts the socket server.
* Throws random warnings and errors most of the time on purpose.
* If it makes it all the way through, you win!
*
* @param Arguments $args The command arguments.
* @param ConsoleIo $io The console io
* @return void The exit code or null for success
*/
public function execute(Arguments $args, ConsoleIo $io): void
{
$port = $args->getArgument('port') ? intval($args->getArgument('port')) : 8080;
$domain = Configure::read('App.fullBaseUrl') !== "localhost" ? Configure::read('App.fullBaseUrl') : 'local.ezbusinessmanager.com';
$this->prepareDomain($domain);
$io->success("Socket server now running on ws://$domain:$port");
$server = new App($domain, $port);
$server->route($domain, new Chat(), ['*']);
$server->run();
}
/**
* Remove http, https, www, and slashes from domain string.
*
* @param string $domain Domain to be prepared.
*/
public function prepareDomain(string &$domain): void
{
// If URI is like, eg. www.way2tutorial.com/
$domain = trim($domain, '/');
// If not have http:// or https:// then prepend it
if (!preg_match('#^http(s)?://#', $domain)) {
$domain = 'http://' . $domain;
}
$urlParts = parse_url($domain);
// Remove www.
$domain = preg_replace('/^www\./', '', $urlParts['host']);
}
它似乎在我调用命令时运行,但是当我到达我的页面时,它告诉我它无法连接它没有到达服务器,因为如果有什么东西,Chat() 对象应该发送一个日志错误后端。
我用这个脚本调用它
"use strict";
const conn = new WebSocket('ws://local.ezbusinessmanager.com:8080');
conn.onopen = () => {
console.log('connected to server...');
};
conn.onerror = e => {
console.error('An error has occurred:', e.type);
};
解决方案
推荐阅读
- java - 如何使用参数形式测试控制器功能?
- python - 使用 PyDev 在 Eclipse 上导入 numpy 时出错
- python - 如何从elasticsearch django返回的查询集中获取数据
- assembly - 当立即打印 mips 中算术运算的结果时,将其直接存储到 $a0 更好吗?
- android - Volley 未在 RecyclerView 中显示数据
- javascript - Json 项目优先级
- sql - 在 SQL 中获取用户当天的最新记录
- python - 是否可以在子图中控制 xlabel 步进标签?
- javascript - 将 magento 2.1.6 升级到 2.2.7 后需要 Js 错误
- javascript - MomentJS 解析大数据字符串