带ssl的websocket例子
还是在那个websocket_demo的例子
rebar-creator create-app websocket_demo
tree一下看看大概目录
├── cert
│ ├── cowboy-ca.crt
│ ├── server.crt
│ └── server.key
├── src
│ ├── path_helper.erl
│ ├── route_helper.erl
│ ├── websocket_demo.app.src
│ ├── websocket_demo_app.erl
│ └── ws_handler.erl
├── static
│ ├── index.html
│ └── js
│ └── jquery.min.js
cert目录从cowboy的sample里面的拿过来即可,ca证书需要全部信任,浏览器得重启,具体google看看
static目录随便弄点过来显示下https即可,这个用来测试证书有没有问题的
直接贴代码
path_helper.erl
-module(path_helper). -export([get_path/]). get_path(ExtraPath)->
{ok,CurrentPath} = file:get_cwd(),
Path = string:concat(CurrentPath,"/"),
string:concat(Path,ExtraPath).
route_helper.erl
-module(route_helper). -export([get_routes/]). get_routes() ->
StaticPath = path_helper:get_path("../static/"),
[
{'_', [
{"/websocket", ws_handler, []},
{"/static/[...]", cowboy_static, {dir, StaticPath}}
]}
].
websocket_demo_app.erl
-module(websocket_demo_app).
-behaviour(application).
-export([start/, stop/]).
start(_Type, _Args) ->
ok = application:start(crypto),
ok = application:start(cowlib),
ok = application:start(ranch),
ok = application:start(cowboy),
CertDir = path_helper:get_path("../cert/"),
io:format("~p~n",[CertDir]),
Routes = route_helper:get_routes(),
Dispatch = cowboy_router:compile(Routes),
Port = ,
TransOpts = [
{port, Port},
{cacertfile, CertDir ++ "/cowboy-ca.crt"},
{certfile, CertDir ++ "/server.crt"},
{keyfile, CertDir ++ "/server.key"}
],
ProtoOpts = [{env, [{dispatch, Dispatch}]}],
{ok, _} = cowboy:start_https(https,, TransOpts, ProtoOpts).
stop(_State) ->
ok.
ws_handler.erl
-module(ws_handler).
-behaviour(cowboy_websocket_handler). -export([init/]).
-export([websocket_init/]).
-export([websocket_handle/]).
-export([websocket_info/]).
-export([websocket_terminate/]). init({tcp, http}, _Req, _Opts) ->
io:format("init ~n"),
{upgrade, protocol, cowboy_websocket};
init({ssl, http}, _Req, _Opts) ->
io:format("ssl init ~n"),
{upgrade, protocol, cowboy_websocket}. websocket_init(_TransportName, Req, _Opts) ->
io:format("websocket_init ~n"),
erlang:start_timer(, self(), <<"Hello!">>),
{ok, Req, undefined_state}. websocket_handle({text, Msg}, Req, State) ->
%% io:format("websocket_handle text ~p,~p,~p~n",[Msg,Req,State]),
{reply, {text, << "That's what she said! ", Msg/binary >>}, Req, State};
websocket_handle(_Data, Req, State) ->
%% io:format("websocket_handle ~p,~p,~p~n",[_Data,Req,State]),
{ok, Req, State}. websocket_info({timeout, _Ref, Msg}, Req, State) ->
%io:format("websocket timeout ~n"),
erlang:start_timer(, self(), <<"How' you doin'?">>),
{reply, {text, Msg}, Req, State};
websocket_info(_Info, Req, State) ->
io:format("websocket_info ~p,~p,~p~n",[_Info,Req,State]),
{ok, Req, State}. websocket_terminate(_Reason, _Req, _State) ->
io:format("terminate ~n"),
ok.
注意,在ssl的是,init的参数
在线测试http://www.baiyangliu.com/lab/websocket/
本地websocket测试地址
wss://loclahost:8080/websocket
如果提示ssl错误什么的,最好先看看下面这个对不对
https://localhost:8080/static/index.html
注:ssl以后,访问必须以域名,不能ip。
带ssl的websocket例子的更多相关文章
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- golang gorilla websocket例子
WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...
- PHP 通过带SSL的SMTP 发送邮件的处理
客户端与SMTP服务器的通讯, 是通过固定的命令以及返回编号完成的. 发送Email, 需要经过的步骤有创建socket (区分带ssl, 还是不带ssl)执行命令, 并检查返回值是否与预期一致, 不 ...
- Qt官方对OpenSSL的编译方法的描述,单独下载的Qt library则一般不带SSL(包括QT FAQ)
https://wiki.qt.io/MSYS2http://wiki.qt.io/Compiling_OpenSSL_with_MinGWhttps://wiki.qt.io/MinGW-64-bi ...
- Web通信协议:OSI、TCP、UDP、Socket、HTTP、HTTPS、TLS、SSL、WebSocket、Stomp
1 各层的位置 1.1 OSI七层模型全景图 OSI是Open System Interconnect的缩写,意为开放式系统互联. 1.2 五层网络协议 在七层的基础上, ...
- Spring Boot SSL [https]配置例子
前言 本文主要介绍Spring Boot HTTPS相关配置,基于自签证书实现: 通过本例子,同样可以了解创建SSL数字证书的过程: 本文概述 Spring boot HTTPS 配置 server. ...
- 带你走近WebSocket协议
一.WebSocket协议是什么? WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 二.那为什么我们要用WebSocket协议呢? 了解计算机网络协议的 ...
- 带SSL证书的httpclient 远程接口工具类
package com.iups.wx.util; import java.io.IOException; import java.io.UnsupportedEncodingException; i ...
- 在Mac上搭建带ssl协议和域名指向的Apache服务器
顾名思义,就是要在苹果电脑上搭建 Apache 服务器,并且支持 https 协议,能用指定域名访问(有些开发调试需要注册域名,比如调试微信JS-SDK),当然最好能在手机端进行调试.首先,Mac 系 ...
随机推荐
- I/O流+统计文件词频
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Python3基本数据类型(五)
Python中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在Python中变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型 ...
- Jenkins分享
2016-02-26 小马哥 程序员之路 PPT下载地址:http://pan.baidu.com/s/1i4pw6oP Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使 ...
- windows下类似Linux下的grep命令
今天要查看windws下代理服务器有哪些IP连接过来,但使用 netstat -na 后出现很多连接会话,不方便查看. 想到Linux下的grep非常方便,于是网络上搜寻,还是有类似的命令findst ...
- anjular2以及微信小程序的一点比较
1条件渲染: 小程序:用 wx:if="{{condition}}" 来判断是否需要渲染该代码块. <view wx:if="{{condition}}" ...
- golang slice 与list 的性能分析。
一 · 比较slice 与 list 遍历创建和添加元素速度. package main import ( "time" "fmt" "contain ...
- Android Bluetooth 总结
一.Android Bluetooth现状 (1)Android2.2版 支持的蓝牙核心版本是Bluetooth 2.0 + EDR. (2)Android 的蓝牙 使用了BlueZ协议栈,但只实现了 ...
- PyQt: “AttributeError: 'Form' object has no attribute 'exec_'” when opening second window
# -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication , QMainWindow from PyQt5 ...
- java 实现共享锁和排它锁
一直对多线程有恐惧,在实现共享锁和排它锁之后,感觉好了很多. 共享锁 就是查询的时候,如果没有修改,可以支持多线程查询: 排它锁 就是修改的时候,锁定共享锁,停止查询,同时,锁定排它锁,只 ...
- BZOJ3444 最后的晚餐【细节题+组合数学】*
BZOJ3444 最后的晚餐 Description [问题背景] 高三的学长们就要离开学校,各奔东西了.某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结.因为有m名学生偷偷找他,要求和自己暗恋的 ...