创建工程

  1. rebar-creator create-app websocket_demo

文件列表

route_helper.erl

  1. -module(route_helper).
  2.  
  3. -export([get_routes/]).
  4.  
  5. get_routes() ->
  6. [
  7. {'_', [
  8. {"/websocket", ws_handler, []}
  9. ]}
  10. ].

websocket_demo_app.erl

  1. -module(websocket_demo_app).
  2.  
  3. -behaviour(application).
  4.  
  5. -export([start/, stop/]).
  6.  
  7. start(_Type, _Args) ->
  8.  
  9. ok = application:start(crypto),
  10. ok = application:start(cowlib),
  11. ok = application:start(ranch),
  12. ok = application:start(cowboy),
  13.  
  14. Routes = route_helper:get_routes(),
  15. Dispatch = cowboy_router:compile(Routes),
  16. Port = ,
  17. TransOpts = [{port, Port}],
  18. ProtoOpts = [{env, [{dispatch, Dispatch}]}],
  19. cowboy:start_http(http, , TransOpts, ProtoOpts).
  20.  
  21. stop(_State) ->
  22. ok.

ws_handler.erl

  1. -module(ws_handler).
  2. -behaviour(cowboy_websocket_handler).
  3.  
  4. -export([init/]).
  5. -export([websocket_init/]).
  6. -export([websocket_handle/]).
  7. -export([websocket_info/]).
  8. -export([websocket_terminate/]).
  9.  
  10. init({tcp, http}, _Req, _Opts) ->
  11. io:format("init ~n"),
  12. {upgrade, protocol, cowboy_websocket}.
  13.  
  14. websocket_init(_TransportName, Req, _Opts) ->
  15. io:format("websocket_init ~n"),
  16. erlang:start_timer(, self(), <<"Hello!">>),
  17. {ok, Req, undefined_state}.
  18.  
  19. websocket_handle({text, Msg}, Req, State) ->
  20. %% io:format("websocket_handle text ~p,~p,~p~n",[Msg,Req,State]),
  21. {reply, {text, << "That's what she said! ", Msg/binary >>}, Req, State};
  22. websocket_handle(_Data, Req, State) ->
  23. %% io:format("websocket_handle ~p,~p,~p~n",[_Data,Req,State]),
  24. {ok, Req, State}.
  25.  
  26. websocket_info({timeout, _Ref, Msg}, Req, State) ->
  27. %io:format("websocket timeout ~n"),
  28. erlang:start_timer(, self(), <<"How' you doin'?">>),
  29. {reply, {text, Msg}, Req, State};
  30. websocket_info(_Info, Req, State) ->
  31. io:format("websocket_info ~p,~p,~p~n",[_Info,Req,State]),
  32. {ok, Req, State}.
  33.  
  34. websocket_terminate(_Reason, _Req, _State) ->
  35. io:format("terminate ~n"),
  36. ok.

在线测试http://www.baiyangliu.com/lab/websocket/

本地websocket测试地址

  1. ws://127.0.0.1:8080/websocket

文本消息和binary消息自己打印慢慢看即可

erlang的websocket例子的更多相关文章

  1. Erlang cowboy websocket 服务器

    Erlang cowboy websocket 服务器 原文见于: http://marcelog.github.io/articles/erlang_websocket_server_cowboy_ ...

  2. 带ssl的websocket例子

    还是在那个websocket_demo的例子 rebar-creator create-app websocket_demo tree一下看看大概目录 ├── cert │   ├── cowboy- ...

  3. golang gorilla websocket例子

    WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. WebSocket通信协议于2011年被IETF定 ...

  4. (网页)websocket例子

    转载自博客园张果package action; import javax.websocket.CloseReason; import javax.websocket.OnClose; import j ...

  5. 基于netty的websocket例子

    nettyServer package com.atguigu.netty.websocket; import javax.annotation.PostConstruct; import org.s ...

  6. Springboot WebSocket例子

    Springboot整合WebSocket 1.application.properties #设置服务端口号 server.port=8080 #thymeleaf配置 #是否启用模板缓存. spr ...

  7. WebSocket实战之——JavaScript例子

    一.详细代码案例 详细解读一个简单html5 WebSocket的Js实例教程,附带完整的javascript websocket实例源码,以及实例代码效果演示页面,并对本实例的核心代码进行了深入解读 ...

  8. html websocket

    from:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/ websocket 规范升级过,在该链接的文章内未提及,后面 ...

  9. erlang 200w进程测试

    参照<programing erlang>书例子,测试erlang创建进程性能 创建N个进程 都wait,然后挨个发送die关闭进程,代码如下: 测试场景:200w进程.MacBook P ...

随机推荐

  1. 发送垃圾邮件的僵尸网络——药物(多)、赌博、股票债券等广告+钓鱼邮件、恶意下载链接、勒索软件+推广加密货币、垃圾股票、色情网站(带宏的office文件、pdf等附件)

    卡巴斯基实验室<2017年Q2垃圾邮件与网络钓鱼分析报告> 米雪儿 2017-09-07 from:http://www.freebuf.com/articles/network/1465 ...

  2. 初识async函数

    为什么会出现async函数 首先从大的方面来说,出现async函数时为了解决JS编程中的异步操作,再往具体说就是为了对以往异步编程方法的一种改进,也有人说仅仅只是Generator 函数的语法糖,这个 ...

  3. vue创建组件

    vue创建组件是很容易的: js: Vue.component("component-item",{   //component-item就是我们在HTML页面上引用的组件,它会在 ...

  4. Idea_02_常用配置

    一.前言 在上一节,我们安装并激活了IDEA,这一节我们来设置下Idea的常用配置: 项目相关配置 Idea常用配置 二.项目相关配置 运行Idea,出现下图 1.配置默认JDK 1.1 添加 SDK ...

  5. 20165202 学习基础和c语言基础调查

    你有什么技能比大多人(超过90%以上)更好? 我对自行车运动的兴趣始于初中时期,不敢说比大多数人更好,但在业余爱好者中相对来说还不错. 针对这个技能的获取你有什么成功的经验? 接触自行车运动几年里,我 ...

  6. ASP.NET MVC 中使用用户控件——转

    讲讲怎么在 ASP.NET MVC2中使用用户控件.首先我们新建一个用户控件,   我们命名为SelectGroup.ascx,代码如下 <%@ Control Language="C ...

  7. 《Tomcat内核设计剖析》京东评论过百

    到京东看了下<Tomcat内核设计剖析>评论都一百多了,上个月也第二次印刷了,这里看下好评.中评和差评. 好评: 中评 对于中评,请看 为什么<写Tomcat内核设计剖析>,就 ...

  8. 1. Java EE简介 - JavaEE基础系列

    什么是Java EE? 真的是你理解的那样吗? Java EE, 原名J2EE, 其核心由一系列抽象的标准规范所组成, 是针对目前软件开发中所普遍面临问题的解决方案. 注意以上定义中的"抽象 ...

  9. 如何使用fiddller跟踪windows进程发送的请求20140911

    总结点:如何使用fiddller跟踪windows进程发送的请求 案例如下: 需求:运维工具提出需求,对每个插件的配置文件,同步到运维中心时先加密,然后传输到运维中心解密,存储到数据库 测试分析:这个 ...

  10. HDU 1374

    http://acm.hdu.edu.cn/showproblem.php?pid=1374 已知三点坐标,求三点确定的圆的周长 #include <iostream> #include ...