javascript - 嗨,我正在处理 Yaws 网络套接字连接问题
问题描述
我偶然发现了一个成功启用 Web 浏览器和 Yaws Web 服务器之间的 Web 套接字连接的问题。我想展示的客户端的 Javascript 代码示例和服务器的 Erlang 代码示例都来自名为“使用 Erlang 构建 Web 应用程序”的编程教科书中的示例。我有一种感觉,问题在于我运行的 Yaws Web 服务器版本比本书更高,准确地说是“2.0.6”;但我不知道。我想知道你的想法。谢谢你。
Javascript 代码示例(客户端)。
$(function ()
{
var WebSocket = window.WebSocket || window.MozWebSocket;
var socket = new WebSocket("ws://localhost:8080/");
// wait for socket to open
socket.onopen = function ()
{
$('input#echo').on('keypress', function (event)
{
if (event.which == 13) {
event.preventDefault();
var msg = $(this).val();
socket.send(JSON.stringify(
{
message:msg
}
));
}
});
socket.onmessage = function(msg)
{
var message = $.parseJSON(msg.data);
var html = $('div#messages').html() + message.message + "<br>\n";
$('div#message').html(html);
}
}
});
Upgrade: WebSocket
Erlang 代码示例(服务器端)
-module(sole_callback).
%% Export for websocket callbacks
-export([handle_message/1, say_hi/1]).
handle_message({binary, Message}) ->
io:format("~p:~p basic echo handler got ~p~n",
[?MODULE, ?LINE, Message]),
{reply, {binary, <<Message/binary>>}}.
say_hi(Pid) ->
io:format("asynchronous greetings~n", []),
yaws_api:websocket_send(Pid, {text, <<"hi there!">>}).
Erlang 代码示例(嵌入式模式)
<script language="Javascript" type="text/javascript" src="jquery.min.js"></script><script language="Javascript" type="text/javascript" src="record.js"></script><script language="Javascript" type="text/javascript" src="socket.js"></script>
<erl>
out(Arg) ->
{html, "<img src=images_folder/audio.png onclick=socket.onopen() width=25px height=25px>"}.
</erl>
<erl>
get_upgrade_header(#headers{other=L}) ->
lists:foldl(fun({http_header,_,KO,_,V}, undefined) ->
K = case is_atom(KO) of
true ->
atom_to_list(KO);
false ->
KO
end,
case string:to_lower(K) of
"upgrade" ->
true;
_ ->
false
end;
(_, ACC) ->
ACC
end, undefined, L).
%%------------------------------------------------------------------------------
out(Arg) ->
case get_upgrade_header(Arg#arg.headers) of
true ->
error_logger:warning_msg("Not a web socket client~n"),
{content, "text/plain", "You're not a web sockets client! Go away!"};
false ->
error_logger:info_msg("Starting web socket~n"),
{websocket, sole_callback, []}
end.
</erl>
解决方案
推荐阅读
- java - 一个接一个的放置JPanel就是隐藏之前附加的JPanel
- c# - 为什么 Audit.NET 为 AuditContext 获取本地 DbContext 以记录数据
- java - Java中的构造函数链接和超级关键字
- presto - EMR Presto LDAPS:未加载身份验证器
- react-native - 流式传输 RTMP 与覆盖,反应原生
- firebase - Flutter:- already_active,图像选择器已经激活,null,null
- c# - 如何制作输出:1 1 2 6 3 11 4 16 5 21
- c - 如何在 Contiki Cooja 模拟器上访问 RPL 的 DIO 消息?
- python - 数据框 - 在列中查找常用短语
- javascript - Firebase Cloud Function:即使数据在 Cloud Firestore 中,Cloud Firestore 查询也无效