websocket tcpsocket 区别

我用原始php写了 tcpSocket 。用tcpClient 能连接,websocket也能连接。那workerman里者两种server区别在哪里?
2017-01-10 10:47 添加评论 分享
已邀请:
0

walkor

赞同来自:

websocket 是一种通讯协议,类似http ftp smtp这些都是属于通讯协议。

不管websocket http ftp smtp 等这些应用层通讯协议都是基于tcp传输层协议的。
0

sbjwwjsm

赞同来自:

<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// websocket服务端
$ws = new Worker('websocket://0.0.0.0:4236');
$ws->onConnect = function($connection)
{
$connection->onWebSocketConnect = function($connection , $http_header)
{
// 可以在这里判断连接来源是否合法,不合法就关掉连接
// $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接
if($_SERVER['HTTP_ORIGIN'] != 'http://chat.workerman.net')
{
$connection->close();
}
// onWebSocketConnect 里面$_GET $_SERVER是可用的
// var_dump($_GET, $_SERVER);
};
};
Worker::runAll();

开启websocket后 netstat -anp|grep 4236 看不到监听 。 ps aux|grep php 可以看到进程

开启tcp后 netstat -anp|grep 4236 就看得到监听
0

sbjwwjsm

赞同来自:

加上worker = new Worker("websocket://0.0.0.0:8005");就这样

Workerman[worker.php] start in DEBUG mode
Master socket : Resource id #19

没有就
Workerman[worker.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.3.6 PHP version:5.5.36
------------------------ WORKERS -------------------------------
user worker listen processes status
root none tcp://0.0.0.0:8000 4 [OK]
root none http://0.0.0.0:8005 1 [OK]
0

walkor

赞同来自:

不要提前运行 Worker::runAll();
0

sbjwwjsm

赞同来自:

<?php

use Workerman\Worker;

require_once __DIR__ . '/Workerman/Autoloader.php';

Worker::$daemonize = true;
$ws_worker = new Worker("tcp://0.0.0.0:8000");

$wd_worker = new Worker("http://0.0.0.0:8005";);
$ww_worker = new Worker("websocket://0.0.0.0:8081");
//启动4个进程对外提供服务

//当接收到客户端发来的数据后显示数据并回发到客户端

$ws_worker->onMessage = function($connection, $data) {

//显示数据

echo "you just received: $data\n";

//向客户端回发数据

$connection->send("you just send: $data");

};

//运行worker

Worker::runAll();
?>
还是Master socket : Resource id #19
0

walkor

赞同来自:

不要直接运行 Worker::runAll();
运行 Worker::runAll(); 后后面的代码就不会运行了,也就是其它端口的监听代码执行不到。

Worker::runAll();
去掉
或者像例子那样改成
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}

要回复问题请先登录注册

退出全屏模式 全屏模式 回复