php swoole 和 websocket的初次碰撞

php swoole 扩展仿佛为php开发打开了一扇窗户

php workman和swoole原来是两个东东

  • swoole的使用范围更广,能做更多事应该

websocket的介绍

socket 与 websocket也是两个东东

wss 配置 和 nginx的配置

  • wss swoole 服务端
<?php
error_reporting(E_ALL);
set_time_limit(0);

//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9505, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$config = [
        'daemonize' => true,
        'ssl_key_file'  => '/workspace/file/2191282_www.havetatami.com.key',
        'ssl_cert_file' => '/workspace/file/2191282_www.havetatami.com.pem'
];
$ws->set($config);
//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {
        var_dump($request->fd);
        $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件
$ws->on('message', function ($ws, $frame) {
        var_dump($ws->connection_list());
        foreach ($ws->connection_list() as $fd){
                $ws->push($fd, "server: {$frame->data}");
        }
});

//监听WebSocket连接关闭事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();
  • wss 浏览器端
<html>
<head>
<meta charset=utf-8 >
<title>test</title>
</head>

<body>

<h3 style="text-align:center;">test</h3>

<script>

var wsServer = 'wss://www.havetatami.com:9502/websocket';
var websocket = new WebSocket(wsServer);

function ssend(){
        websocket.send(1);
        setTimeout(ssend, 100);
}

websocket.onopen = function (evt) {
        console.log("Connected to WebSocket server.");
        //ssend();
};

websocket.onclose = function (evt) {
    console.log("Disconnected");
};

websocket.onmessage = function (evt) {
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
    console.log('Error occured: ' + evt.data);
};

</script>
</body>
</html>
  • nginx 配置
server{

        listen 443 ssl;

        server_name www.havetatami.com;

        ssl_certificate   /workspace/file/www.havetatami.com.chained.crt;
        ssl_certificate_key /workspace/file/www.havetatami.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        root /workspace/web/gitee/havetatami;

        location / {
                index index.php index.html index.htm;
                if (!-e $request_filename) {
                        rewrite ^/index.php(.*)$ /index.php?s=$1 last;
                        rewrite ^(.*)$ /index.php?s=$1 last;
                        break;
                }
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
        access_log /workspace/data/nginx/log/www_havetatami_com_access.log;

}

server{
        listen 80;
        server_name www.havetatami.com;
        return 301 https://$server_name$request_uri;
}

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
upstream websocket {
    server 39.106.58.30:9505;
}
server{

        listen 9502 ssl;

        server_name www.havetatami.com;

        ssl_certificate /workspace/file/2191282_www.havetatami.com.pem;
        ssl_certificate_key /workspace/file/2191282_www.havetatami.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        root /workspace/web/gitee/havetatami;

        location /websocket {
                proxy_pass https://websocket;
                proxy_read_timeout 300s;
                proxy_send_timeout 300s;

                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }

        access_log /workspace/data/nginx/log/www_havetatami_com_access1.log;

}

其它参考文档

题外话

  • 今天看了书,看到了一句话,安慰自己:一个人愿意让你爱他,就已经是你很大的幸运了。你得好好爱,别辜负了对方的信任和期待。

原文地址:https://www.cnblogs.com/jjxhp/p/11409749.html

时间: 2024-10-14 15:15:13

php swoole 和 websocket的初次碰撞的相关文章

使用swoole和websocket结合来制造弹幕

在知乎上无意中看到了一篇有关这个的话题https://zhuanlan.zhihu.com/p/23992890,刚好没事也好久没弄swoole了就自己按照知乎上的那篇文站实操了一下 那个试验中有几个点需要注意一下: 1.首先得安装php的swoole扩展 pecl install swoole  用php -m检查扩展是否安好 2.jquery包和弹幕所需要的包最好用他那个dist中的文件,不然的话有可能页面js会报错 3. liunx发行版安装php5.3+并且编译swoole扩展,在php

用swoole和websocket开发简单聊天室

首先,我想说下写代码的一些习惯,第一,任何可配置的参数或变量都要写到一个config文件中.第二,代码中一定要有日志记录和完善的报错并记录报错.言归正传,swoole应该是每个phper必须要了解的,它号称重新定义了php.此聊天室利用了swoole高并发并且异步非阻塞的特点提高了程序的性能. 首先,定义一个 swoole_lock 和 swoole_websocket_server ,并且配置参数,具体参数详情可以去swoole官网查看. public function start(){ $t

Swoole实现基于WebSocket的群聊私聊

本文属于入门级文章,大佬们可以绕过啦.如题,本文会实现一个基于Swoole的websocket聊天室(可以群聊,也可以私聊,具体还需要看数据结构的设计). 搭建Swoole环境 通过包管理工具 # 安装依赖包 $ sudo apt-get install libpcre3 libpcre3-dev # 安装swoole $ pecl install swoole # 添加extension拓展 $ echo extension=swoole.so > /etc/php5/cli/conf.d/s

WebSocket 教程

WebSocket 教程 本篇博客系转载 原文地址 http://www.ruanyifeng.com/blog/2017/05/websocket.html?utm_source=tuicool&utm_medium=referral 作者: 阮一峰 日期: 2017年5月15日 WebSocket 是一种网络通信协议,很多高级功能都需要它. 本文介绍 WebSocket 协议的使用方法. 一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了

使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM

使用PHP+Swoole实现的网页即时聊天工具 全异步非阻塞Server,可以同时支持数百万TCP连接在线 同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE 拥有完整的UI界面 支持单聊/群聊/组聊等功能 支持发送表情 支持永久保存聊天记录 基于Server PUSH的即时内容更新,登录/登出/状态变更/消息等会内容即时更新 最新的版本已经可以原生支持IE系列浏览器了,基于Http长连接 安装 swoole扩展 pecl install swoole swool

WebSocket 教程(转载)

WebSocket 教程 作者: 阮一峰 日期: 2017年5月15日 WebSocket 是一种网络通信协议,很多高级功能都需要它. 本文介绍 WebSocket 协议的使用方法. 一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起. 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.

Swoole入门到实战打造高性能赛事直播平台

韩天峰力荐 Swoole入门到实战打造高性能赛事直播平台 第1章 课程介绍 欢迎大家来到swoole的课程!本章主要是介绍了swoole的一些特性,以及使用场景,并且分享了swoole在其他公司的一些案例,最后重点讲解了swoole学习的一些准备工作. 第2章 PHP 7 源码安装 很多工作好几年的PHPer对源码编译安装并不是很了解,其实这种情况是非常可怕的.本章我会教大家如何通过源码安装PHP7,并且简化PHP执行命令.最后重点讲解了源码安装踩到的坑,让您在源码编译安装过程中少走很多弯路.

WebSocket api与服务器返回的数据类型判断(文件、二进制数据)

一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起. 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.HTTP 协议做不到服务器主动向客户端推送信息. 这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦.我们只能使用"轮询":每隔一段时候,就发出一个

WebSocket教程

WebSocket 是一种网络通信协议,很多高级功能都需要它. 本文介绍 WebSocket 协议的使用方法. 一.为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起. 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.HTTP 协议做不到服务器主动向客户端推送信息. 这种单向请求的特点,注