swoole 使用websocket建立wss连接

swoole 使用websocket建立wss连接

wss协议实际是websocket+SSL,就是在websocket协议上加入SSL层,类似https(http+SSL)。  ws一般默认是80端口,而wss默认是443端口,大多数网站用的就是80和433端口。ws和wss的体现形式分别是TCP+WS AS WS ,TCP+TLS+WS AS WS。服务器网址就是 URL。

更多关于websocket wss于http等协议的关系,可以看看这篇文章:浅谈WEBSOCKET协议、WS协议和WSS协议原理及关系

下面我们来讲解下在swoole下如何启用websocket wss协议。

swoole启用wss连接服务的检查步骤:

1、wss应用,发起websocket连接的页面必须使用https

2、浏览器不信任的ssl证书无法使用wss

—-即站点需要支持https访问,且需要浏览器信任的ssl证书

3、必须支持PEM格式,不支持DER格式,可使用openssl工具进行转换

4、编译swoole时需加入–enable-openssl选项,可通过以下命名查看swoole是否启用openssl

$php --ri swoole
swoole

swoole support => enabled
Version => 1.10.1
Author => tianfeng.han[email: mikan.tenny@gmail.com]
epoll => enabled
eventfd => enabled
timerfd => enabled
signalfd => enabled
cpu affinity => enabled
spinlock => enabled
rwlock => enabled
async http/websocket client => enabled
openssl => enabled
Linux Native AIO => enabled
pcre => enabled
zlib => enabled
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled

Directive => Local Value => Master Value
swoole.aio_thread_num => 2 => 2
swoole.display_errors => On => On
swoole.use_namespace => Off => Off
swoole.fast_serialize => Off => Off
swoole.unixsock_buffer_size => 8388608 => 8388608

5、启动websocket ssl模式

$setConfig = [ 
    'ssl_key_file' => '/usr/local/nginx/conf/server.key', 
    'ssl_cert_file' => '/usr/local/nginx/conf/server.crt' 
]; 
$server = new \swoole_websocket_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL); 
$server->set($setConfig);

配置nginx支持ssl(示例为在反向代理中添加ssl支持配置)

server {
    listen       80;
    listen       443;
    server_name  ktvme.banyanx.cn;

    ssl                  on;
    ssl_certificate      /www/xxxx/nginx/ssl/1_ktvme.banyanx.cn_bundle.crt;
    ssl_certificate_key  /www/xxxx/nginx/ssl/2_ktvme.banyanx.cn.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;

    access_log /www/xxxx/ktvme.banyanx.cn.log;

    #反向代理配置
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-Ip $remote_addr;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:82;
        proxy_redirect off;
    }
}

重启nginx即可完成websocket wss的配置。

那么在GoEasy中如何开启websocket wss协议呢?

先来看看JavaScript中引入GoEasy服务的代码:

  <!--[if lte IE 8]>//如果需要支持低版本的IE8及以下
  <script type="text/javascript" src="https://cdn.goeasy.io/json2.js"></script>
  <![endif]-->

  <script type="text/javascript" src="https://cdn.goeasy.io/goeasy-1.0.3.js"></script>
  <script type="text/javascript">
      var goEasy = new GoEasy({
          host:'hangzhou.goeasy.io',//应用所在的区域地址,杭州:hangzhou.goeasy.io,新加坡:singapore.goeasy.io
          appkey: "my_appkey",//替换为您的应用appkey
          forceTLS:false, //如果需要使用HTTPS/WSS,请设置为true,默认为false
          onConnected: function() {
              console.log('连接成功!')
          },
          onDisconnected: function() {
              console.log('连接断开!')
          },
          onConnectFailed: function(error) {
              console.log('连接失败或错误!')
          }
      });
  </script>
  //GoEasy-OTP可以对appkey进行有效保护
                    

在引入GoEasy的websocket服务时,有这么一项参数:forceTLS。如果需要使用HTTPS/WSS,请设置为true,默认为false。

从这里就能看出GoEasy提供的websocket服务的便捷性,只需改动一个参数,即可完成wss协议的开启。

目前GoEasy提供完整的websocket前后端解决方案,简单的几行代码集成,即可快速搭建您的专属websocket服务。

同时GoEasy还支持更多的前端技术框架比如小程序、react、vue、uniapp等。同时还是支持php、java、python等服务端语言。 有websocket使用需求的开发者可以来注册GoEasy账号进行测试使用。【立即注册

Comments are closed.