thinkphp5+workerman搭建微信小程序socket后台,建立自己的聊天室

1、下载安装tp5

这一步就不详细说了,比较简单,直接看TP文档吧

2、通过composer,为tp5集成workermantp

官方真不错,提供了workerman的集成方法,通过composer一键安装,详细内容见tp官方的github

3、写应用,先让workerman在tp中跑起来(直接应用tp官方内容)

首先创建控制器类并继承 think\worker\Server,然后设置属性和添加回调方法

namespace app\index\controller;
use think\worker\Server;
class Worker extends Server
{
    protected $socket = 'ws://0.0.0.0:2346';
    public function onMessage($connection,$data)
    {
        //这里写具体的逻辑
        $connection->send($data);
    }
}

支持workerman(具体用法请看workerman文档)所有的回调方法定义(回调方法必须是public类型)
在应用根目录增加入口文件 server.php

#!/usr/bin/env php
< ?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
<!--?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

在命令行启动服务

php server.php start

linux下面可以支持下面指令

php server.php start|stop|status|restart|reload

打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行)

// 假设服务端ip为127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
    alert("连接成功");
    ws.send('tom');
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};

可以看到返回说明搭建成功

4、重点来了,就是让ws变成wss,这也是最头疼的问题,需要使用nginx代理

首先,需要为你需要访问的域名申请SSL,这里是通过Nginx的反向代理实现功能,具体配置如下:

upstream websocket {
    # 填写workerman中websocket监听的端口
    server 127.0.0.1:2346;
}

server {
    # 填写外部wss连接端口,不冲突即可
    listen 8282;
    ssl on;
    server_name test.painchina.com;
    ssl_certificate      key/key.csr;
    ssl_certificate_key  key/key.key;
    ssl_session_timeout 5m;
    ssl_session_cache shared:SSL:50m;
    ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    location / {
        proxy_pass http://websocket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

(1)把test.painchina.com换成你自己的访问域名
(2)把key.csr和key.key修改为你自己的SSL证书内容

5、搭建成功,访问试试

根据上面这个配置,访问地址为wss://test.painchina.com:8282

注意:微信小程序的sock链接不能带端口的,默认端口是443,带端口连接会出现开发工具、预览版正常,体验版和正式版错误

转载于:https://my.oschina.net/bibo/blog/1498974

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个非常流行的Java Web框架,它提供了一种简单的方式来构建现代Web应用程序。Spring Boot支持用WebSocket在客户端和服务器之间提供实时交互的功能。也就是说,Spring Boot和WebSocket在业务场景中的应用非常广泛。此外,如果需要安全加密的连接,可以使用WebSocket over SSL (wss)协议。 下面介绍一下如何在Spring Boot中配置wss连接: 1. 配置证书 在Spring Boot中,要使用wss连接,必须启用SSL,并配置证书。自己生成的证书可以使用Java Keytool命令生成,也可以使用商业证书。需要将证书保存到Spring Boot工程的某个路径中。 2. 配置Tomcat Spring Boot使用的默认Web容器是Tomcat,要开启wss连接需要在application.properties文件中添加如下配置: ``` server.port=8443 server.ssl.key-store=classpath:/keystore/yourKeyStore.jks server.ssl.key-store-password=yourPassword server.ssl.key-password=yourPassword server.ssl.keyAlias=yourKeyAlias ``` 这里server.port是SSL协议默认端口,server.ssl.key-store为证书的路径和名称,server.ssl.key-store-password和server.ssl.key-password为证书的密码,server.ssl.keyAlias为证书的别名。 3. 添加支持WebSocket的依赖包 在Spring Boot工程的maven项目中,需要添加如下的依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 4. 编写WebSocket处理类 在Spring Boot中需要有一个WebSocket处理类来处理与客户端的交互。示例代码如下: ``` @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/app"); } } ``` 这里使用了Spring的两个注解@Configuration和@EnableWebSocketMessageBroker。registerStompEndpoints方法是为了建立WebSocket的连接,并且允许跨域访问。configureMessageBroker方法的作用是配置消息代理和目的头前缀。 5. 在控制器中使用WebSocket 在具体的控制器中,可以使用sendMessage方法来向客户端发送消息,如下所示: ``` @Autowired private SimpMessagingTemplate messagingTemplate; ... @GetMapping("/test") public void sendMessage() { messagingTemplate.convertAndSend("topic/test", "Hello World!"); } ``` 这里@Autowired是注入SimpMessagingTemplate,sendMessage方法是将消息发布到指定的主题中。 通过以上这些步骤,就可以在Spring Boot中完成wss连接的构建。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值