Erlang实现简单Web服务器

转贴一个简单的Web服务器:
httpd.erl
[code]
%% httpd.erl - MicroHttpd
-module(httpd).
-author("ninhenry@gmail.com").

-export([start/0,start/1,start/2,process/2]).
-import(regexp,[split/2]).

-define(defPort,8888).
-define(docRoot,"public").

start() -> start(?defPort,?docRoot).
start(Port) -> start(Port,?docRoot).
start(Port,DocRoot) ->
case gen_tcp:listen(Port, [binary,{packet, 0},{active, false}]) of
{ok, LSock} -> server_loop(LSock,DocRoot);
{error, Reason} -> exit({Port,Reason})
end.

%% main server loop - wait for next connection, spawn child to process it
server_loop(LSock,DocRoot) ->
case gen_tcp:accept(LSock) of
{ok, Sock} ->
spawn(?MODULE,process,[Sock,DocRoot]),
server_loop(LSock,DocRoot);
{error, Reason} ->
exit({accept,Reason})
end.

%% process current connection
process(Sock,DocRoot) ->
Req = do_recv(Sock),
{ok,[Cmd|[Name|[Vers|_]]]} = split(Req,"[ \r\n]"),
FileName = DocRoot ++ Name,
LogReq = Cmd ++ " " ++ Name ++ " " ++ Vers,
Resp = case file:read_file(FileName) of
{ok, Data} ->
io:format("~p ~p ok~n",[LogReq,FileName]),
Data;
{error, Reason} ->
io:format("~p ~p failed ~p~n",[LogReq,FileName,Reason]),
error_response(LogReq,file:format_error(Reason))
end,
do_send(Sock,Resp),
gen_tcp:close(Sock).

%% construct HTML for failure message
error_response(LogReq,Reason) ->
"<html><head><title>Request Failed</title></head><body>\n" ++
"<h1>Request Failed</h1>\n" ++ "Your request to " ++ LogReq ++
" failed due to: " ++ Reason ++ "\n</body></html>\n".

%% send a line of text to the socket
do_send(Sock,Msg) ->
case gen_tcp:send(Sock, Msg) of
ok -> ok;
{error, Reason} -> exit(Reason)
end.

%% receive data from the socket
do_recv(Sock) ->
case gen_tcp:recv(Sock, 0) of
{ok, Bin} -> binary_to_list(Bin);
{error, closed} -> exit(closed);
{error, Reason} -> exit(Reason)
end.
[/code]
运行时在httpd.erl本地建一个public目录,public目录里放一个index.html文件
然后httpd:start()启动服务器,就可以访问http://localhost:8888/index.html了
erlang用cowboy搭建简单服务器收发http erlang使用Cowboy搭建服务器收发http消息 阅读详情

相关推荐

Erlang的Web库和框架

关于ChicagoBoss,Nitrogen ,Zotontic,BeepBeep,ErlyWeb,Erlang Boss特性的介绍,这篇是转载的

Nicer_feng's blog 801

无涯教程-Erlang - Web编程

库在Erlang中构建Web服务器,让我们看一下Erlang中可用于网络编程的一些功能,可以实现HTTP服务器,也称为httpd来处理HTTP请求。无涯教程网提供在Erlang中,可以使用 inets 库在Erlang中构建Web服务器,让我们看一下Erlang中可用于...库的启动功能,以便可以实现Web服务器,以下是在Erlang中创建Web服务器进程的示例。要在Erlang中实现 Hello Learnfk Web服务器,请执行以下步骤-编译上面的文件,然后在 erl 中运行以下命令。

无涯教程 1235

Erlang与Websockets在实时通信中的应用

本文将深入探讨Erlang语言和Websockets技术结合使用时,在实时通信系统中的实践和应用。通过分析Erlang实现的简单IRC聊天服务器和浏览器端的SVG图形交互,我们将了解Erlang进程间通信机制如何与Web技术无缝对接,并在实时数据处理和大规模并发场景下展示其优势。

weixin_42593701的博客 318

erlang web服务器性能,erlang简易web服务器思路

1,开启监控进程 监听端口。gen_tcp:listen(555, Options),其中 Options 选项应为[{active, false},binary,{backlog, 256},{packet, http_bin},{raw, 6, 9, <<1:32/nativa\e>>},{reuseaddr, true}]2spawn_link开启进程 gen_tcp...

weixin_39814369的博客 476

C++笔试题整理

目录 1. 笔试题1 1.1 链表反转 1.2 String 2. 笔试题2 2.1 求下面函数的返回值(微软) 2.2 什么是“引用”?申明和使用“引用”要注意哪些问题? 2.3 将“引用”作为函数参数有哪些特点? 2.4 在什么时候需要使用“常引用”?  2.5 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则? 2.6 “引用”与多态的关系? 2.7 “引用”与指针的区别是什么? 2.8 什么时候需要“引用”? 2.9 结构与联合有和区别? 2.10 下面关于.

星月相随的专栏 2483

TSC条码打印机C#例程(tsclib.dll调用) 【转】

//----program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using System.Runtime.InteropServices;public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "abou...

weixin_33843947的博客 2440

Erlang 与 Web 开发

Erlang 语言的很多特性,决定了它开发服务器端(Server)的程序极其地方便,故此,基于 Erlang的各种服务应用正雨后春笋般涌现。这里我们就大家最熟悉的 Web 开发展开话题。考虑到 Erlang并不广为人知,这里以脱盲为主,如果某个话题引起你的兴趣,建议你参考相关文档继续深入下去。有任何希望讨论的地方,可以在 erlang-china或 ecug 这两个 google gr

QBox/Golang/CERL/StdExt/TPL/WinxGui - 许式伟的专栏 1万+

不用写代码!3个免费在线工具教你完成Lasso回归分析(含生存资料处理)

本文介绍3款免费在线工具,帮助用户无需编程即可完成临床数据的Lasso回归分析,特别适合处理生存资料。通过详细的操作指南和实战技巧,读者可以轻松掌握变量筛选、模型优化及结果解读,提升临床研究的效率和准确性。

weixin_33738555的博客 349

基于erlang的简单Web服务器实现

当然只是用于实验,如果需要用在正式的项目中,推荐使用mochiweb。 https://github.com/mochi/mochiweb 测试代码如下: -module(http). %% ==================================================================== %% API functions %% ===========

【昆山人在上海】 1070

【excel+vba】一表拆多表+不同收件人附带不同附件

快捷处理:拆分多个不同表 给不同人发送不同内容且附带附件

weixin_42779327的博客 2968

滑模观测器与锁相环结合应用:让电机“无感”也能精准旋转的奥秘

本文介绍了永磁同步电机无传感器控制中的滑模观测器(SMO)结合锁相环(PLL)技术。SMO通过创建虚拟电机模型,利用电流误差产生控制信号来估计反电动势;PLL则从反电动势中解码转子位置和速度信息。该组合方案兼具SMO的鲁棒性和PLL的高精度,计算量小且硬件要求低。文章详细阐述了原理、数学模型、参数整定方法及实际实现技巧,包括离散化处理、符号函数替代等优化手段,并分析了低速性能限制、抖振问题等常见挑战及解决方案。最后指出该技术未来将与人工智能、多观测器融合等方向结合发展。

汽车软件开发 193

Erlang实现的简易HTTP服务器

-module(hello). -export([start/2]). start(Port, Doc) -> spawn(fun () -> {ok, Sock} = gen_tcp:listen(Port, [{active, false}]), loop(Sock, Doc) end). loop(Sock, Doc) -> {ok, Conn} = gen_tcp:ac

【昆山人在上海】 1687

Android功耗系列专题理论之六:外设功耗问题分析方法

本文介绍了移动设备功耗问题的分析方法,重点针对传感器和GPU两大模块。传感器部分详细讲解了通过ADB命令获取日志、状态差异分析和单传感器隔离测试的排查方法,并给出优化建议。GPU部分从基础功耗测量、场景测试到功能模块拆解进行多维度分析。同时阐述了GNSS/GPS功耗的测试方法,包括前后台对比、星座双频拆解及SAP/DPO等特殊功能的电流分析,为移动设备功耗优化提供系统性的诊断思路。

370

erlang 一个高性能web框架 Cowboy 的使用笔记

环境:ubuntu_server 1210 目的:构建web版hello world程序 参考链接:http://roberto-aloi.com/blog/2013/07/13/create-deploy-erlang-cowboy-application-heroku/ 1.使用rebar 构建一个项目的基础目录 首先获取rebar工具 $ git clonehttps...

weixin_34375233的博客 924

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的商品识别系统(深度学习+UI界面+训练数据集+Python代码)

随着新零售和智能仓储的快速发展,商品识别技术成为计算机视觉领域的重要研究方向。本文详细介绍了基于YOLO系列算法的商品识别系统的完整实现方案,涵盖算法原理、数据集构建、模型训练、系统集成和可视化界面开发。通过对比YOLOv5到YOLOv8各版本性能差异,我们构建了一个高效、准确且用户友好的商品识别系统,并提供完整的代码实现。

YOLO 284

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Erlang--TCP学习(三)串行web server篇

简单web sever改进版:串行服务器,一次只接受一个连接 代码:tcp_sequence_server.erl [code="java"] -module(tcp_sequence_server). -compile(export_all). -define(TCP_OPT, [binary, {packet, 4}, {reuseaddr, true}, {acti...

linvim的专栏 173

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Erlang--TCP学习(二)简单web_Server篇

现在来写个简单的web服务器,要实现的功能是:只接受一个socket连接请求。 服务器代码:tcp_server.erl [code="java"] -module(tcp_server). -compile(export_all). -define(TCP_OPT, [binary, {packet, 4}, {reuseaddr,true}, {active, tru...

linvim的专栏 210

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hot code reloading with Erlang and Rebar3

Dec 3, 2015·6min read In this post I am going to discuss about hot code loading which is a crucial feature for production environments in order to achieve high availability. For people who d...

Yadong_xie的专栏 485

cowboy页面重定向的例子

创建工程 rebar-creator create-app testCowboy   testCowboy_app.erl -module(testCowboy_app). -behaviour(application). -export([start/2, stop/1]). -define(C_ACCEPTORS, 100). start(_Sta...

weixin_33699914的博客 153

基于epoll实现的一个简单web服务器

本文使用epoll建立一个简单的web服务器。通过epoll实现对过个端口的管理,非阻塞的数据发送。(注意本文中的使用没有错,但是在实际应用中是无法处理同一时间超过五个以上的链接,稍后会写出可以处理大批量的链接的代码。) 使用到数据结构 typedef union epoll_data { void *ptr; int fd;

三月软件工作室--任忌 3039

erlang web服务器性能,Erlang实现的一个Web服务器代码实例

转贴一个简单的Web服务器:httpd.erl%% httpd.erl - MicroHttpd-module(httpd).-author("ninhenry@gmail.com").-export([start/0,start/1,start/2,process/2]).-import(regexp,[split/2]).-define(defPort,8888).-define(docRoo...

weixin_35854667的博客 340
上一篇: Mnesia用户手册:五,Mnesia高级特性
下一篇: Erlang和ActionScript3的Socket通讯
hidetobj
博客等级 码龄19年 16粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值