require 'socket'
rules = Hash.new(0)
File.open("rules.txt") do |rule_file|
rule_file.each do |line|
area,prefix = line.chomp.split(/\s*\,\s*/)
rules[prefix] = area;
end
end
puts "bind on localhost 2001"
server = TCPServer.new(2001)
while(session = server.accept)
Thread.new(session) do |session|
filewriters = Hash.new(0)
#readline
prefix = Time.now.to_i
session.each do |line|
begin
code_seg = line[0,7];
if rules.has_key?(code_seg)
area = rules[code_seg];
if !filewriters.has_key?(area)
filewriters[area] = File.open(prefix.to_s+"_"+area+".txt","w+")
end
filewriters[area] << line
else
if !filewriters.has_key?("000")
filewriters["000"] = File.open(prefix.to_s+"_"+"000.txt","w+")
end
filewriters["000"] << line
end
rescue
session.puts $!
end
end
#write back and delete files
begin
filewriters.each do |area,rfile|
rfile.seek(0)
session.puts("area:" + area)
rfile.each do |line|
session.puts line
end
rfile.close
File.delete(prefix.to_s+"_"+area+".txt")
end
rescue
session.puts $!
end
#close session
session.close
end
end
进阶版将我的第一个程序改写成了SOCKET服务。他监听2001端口并开启新线程处理每一个请求,然后将处理结果写回了socket.
这一个程序测试了ruby的file socket等基本IO操作,同时测试了线程的功能,但是听网友说ruby的多线程不是实质上的多线程(或者说是不是像操作系统上的多线程),这一点目前还不了解,以后再深入研究吧。
忽然发现只增加了20行代码就支持了SOCKET+多线程模型,虽然没有细化一些功能,但是也够了。
分享到:
相关推荐
在深入探讨Java编程语言与数据结构的第十一版(进阶版)的编程答案之前,首先需要理解这两个核心概念:Java编程语言和数据结构。Java是一种面向对象的、跨平台的编程语言,由Sun Microsystems(现已被Oracle收购)在...
《Java语言程序设计(进阶篇)》是深入学习Java编程的一本重要教材,其中第21章的课后习题代码集包含了丰富的Java高级特性应用实例,旨在帮助读者巩固和提升在面向对象编程、异常处理、多线程、网络编程、IO流等方面...
在本压缩包“chapter25.rar”中,包含的是《Java语言程序设计(进阶篇)》一书的第25章课后习题的源代码。这是一份宝贵的资源,对于正在学习Java编程,尤其是深入阶段的学生来说,是提高编程技能和理解Java高级特性...
### 应用程序开发进阶:深入探讨Windows CE.NET应用程序中的序列通讯 #### 知识点一:序列通讯(Serial I/O)基础 序列通讯,作为Windows CE.NET应用程序开发中的重要组成部分,允许设备通过串行通信接口(Serial ...
进阶篇(原书第8版).pdf”,我们可以推测这本书主要聚焦于Java编程语言的高级应用和技术深化。Java作为一种广泛应用的编程语言,在软件开发、Web应用、移动应用(尤其是Android应用)等领域占据着重要地位。下面将...
【标签】"4VC6.0第二个简单程序共5页" 是对内容的简要概括,强调了这个教程是关于Visual C++ 6.0版本的,并且是学习序列中的第二个程序,通常意味着它是建立在第一个简单程序基础上的进阶内容。 【压缩包子文件的...
Java语言程序设计是编程学习的重要教材,由Y. Daniel Liang和梁勇共同撰写,分为基础篇...这些知识点贯穿于《Java语言程序设计》的基础篇和进阶篇,通过解答书中复习题和课后题,读者可以深入理解并熟练运用Java编程。
在“第二期:进阶操作VBA”这个教程中,我们将深入探讨VBA的一些高级技巧和概念,帮助你从初学者向熟练开发者迈进。以下是本教程可能涵盖的一些关键知识点: 1. **模块和过程**:在VBA中,代码组织在模块内,而模块...
- **蛇模型**:用数组存储蛇的坐标,数组的每一列代表一个节点,第一行存储横坐标,第二行存储纵坐标。蛇头用“#”表示,蛇身用“*”表示。 游戏的运行基于这样一个流程: - 获取玩家输入或超时信息。 - 根据...
随后,第二个程序引入了更多元素,允许用户指定图形的尺寸与填充字符。最终,第三个程序不仅加入了边界字符的支持,还增加了对更大尺寸图形生成的适应性和更好的异常输入处理。 适合人群:适合于有一定编程基础但...
数组`s`的每一行都可以视为一个独立的一维数组,因此可以获取行地址,如`s[0]`表示第一行的地址,而`s[0]+1`则是第二元素的地址。对于列地址,可以使用指针加法来访问,例如`s[0]+2`表示第三列的第一个元素。 9.2.2...
《C++程序设计语言》是C++编程领域的一本经典教材,由郑莉教授在学堂在线平台上开设的课程中作为主要参考书籍。本压缩包文件包含的编程作业题旨在帮助学习者深入理解和掌握C++的基础知识以及进阶技巧。通过实践这些...
在本课程"38课 React第二天-进阶(2018.9.27)"中,我们将会深入探讨React.js的高级概念和技术,这是一个非常流行的JavaScript库,用于构建用户界面,尤其适用于单页应用程序(SPA)。React以其组件化开发、虚拟DOM...
《Java语言程序设计(进阶篇)》是深入学习Java编程的一本教材,其第24章的课后习题代码包含了许多关于Java高级特性的实践应用。在这一章中,我们很可能会接触到诸如多线程、网络编程、IO流、集合框架、异常处理、...
"第二个例子"通常意味着这个代码是继第一个基础示例之后的进阶教学,旨在进一步解释易语言的语法特性、函数调用或者流程控制等概念。 易语言的核心特点包括直观的可视化编程界面、丰富的内置函数库以及支持多种程序...
在本书《Rust 程序设计语言》第二版简体中文版中,作者们致力于帮助读者理解 Rust 这一现代系统级编程语言的基础与进阶特性。此书涵盖了从安装到实际应用的一系列知识点,以下将对提供的章节内容进行详细的解析。 #...
《JAVA语言程序设计第六版(基础篇和进阶篇)答案》是一份涵盖全面的JAVA学习资源,旨在帮助读者深入理解和实践JAVA编程。这个压缩包包含的答案覆盖了基础到高级的JAVA编程概念,可能包括变量声明、数据类型、流程...
第二部分是算法进阶,详细介绍了几个经典的算法问题及其对应的Scratch实现。这些问题包括约瑟夫环问题、最长回文子串、0/1背包问题、拓扑排序等。通过这些实例,读者可以深入理解算法的本质和实现方法,提高解决问题...
- DLL(Dynamic Link Library)是动态链接库的简称,可以在多个程序间共享代码。 - 建立团队公用DLL函数库可以提高代码复用率。 2. **建立元件库** - 元件库是存储常用元件的地方,方便快速调用。 3. **螺丝系统*...
《Python程序设计(第二版)》是一本专为初学者设计的Python编程教材,它旨在帮助没有编程背景的读者快速掌握Python语言的核心概念和技能。本书涵盖了Python的基础知识,通过结合基础视频讲解、实例演示以及PPT教程...