基于数据流的局域网点歌台

基于数据流的局域网点歌台

摘要:本文将介绍如何使用Python的socket库和多线程技术实现一个内网点歌台程序的后端。此外,还将介绍如何使用爬虫获取歌曲信息以及如何进行客户端和服务端的通信。

一、前言

关于我为什么要写这个。

在课间,老师为了活跃氛围,会叫班长让同学们进行点歌,但是很多人因为害羞或者有别的事情要忙,都不太愿意主动去说。

那么我今天分享的,就是一种可以让用户在局域网内进行歌曲点播的程序。通过该程序,同学可以方便地在局域网内向服务器提交想要听的歌曲,从而避免尴尬,提高了点歌的效率。

本文将大致介绍后端如何使用Python实现该功能,至于前端就不分享了,大家可以自行尝试。


本项目的思路还算明朗,总体就分为两个部分,服务器端和客户端。

在项目背景下,服务器端基本上就布置在教师电脑上即可,客户端分发给各位同学。

服务器端主要任务就是让各个客户端接入进来,等待各个客户端发送想听的歌曲,再通过selenium进行自动化操作(关于selenium本文暂不会介绍,感兴趣的朋友可以自行搜索。)服务器需要解决的问题有两个:①多用户接入②线程并发问题

客户端任务就简单多了,主要就是负责发送各位同学的听歌消息。为了缓解服务器的压力,本项目将一部分的爬虫内容放在客户端上,这样能有效降低服务器的带宽压力。

二、服务器端实现

服务器在整个项目中,是偏复杂的。主要分为两大要点:端口监听 和 多线程

①端口监听:是服务器实现数据传输的一个基础操作。数据监听,形象一点就是一个正在认真写作业的人,只有他愿意去听别人说话,他才会有反应,不然他还是在做自己的事情。

②多线程:通过创建多个线程,让本程序的服务器能够同时与多个客户端进行通信,而不是一个接一个地处理。当客户端请求到达时,服务器可以立即创建一个新的线程来处理该请求,而不是等待当前线程完成。

(零)导入包

目前服务器要实现功能,只需要四个包就够了。

socketsocket包是网络编程的基础,它提供了一种标准的方法来编写跨平台的网络应用程序。在Python中,socket库是内建的,可以直接使用,无需额外安装。

threading:多线程允许服务器在处理一个客户端请求的同时,继续监听新的连接请求。这避免了资源(如网络套接字)的闲置,提高了整体的资源利用率。

webbrowser:当本程序的服务器接收到客户端请求播放特定歌曲id时,便使用webbrowser包来打开歌曲的链接,这样用户就可以在浏览器中听到或看到这首歌曲。

queue:在程序中,queue包提供了一个线程安全的队列,同时可以有以下用处:①共享数据结构:多个线程可以安全地访问这个队列,将其用作共享的数据结构。 ②顺序处理:由于queue默认实现的是先进先出(FIFO)的数据结构,可以通过这个队列来保证按照客户端请求的顺序来播放歌曲。 ③ 解耦线程:通过使用队列,可以将多个线程解耦,使它们可以独立地工作,同时保持数据的一致性和顺序。

(一)端口监听

其实纵观所有的服务器端,他的主要任务就是接收客户端的连接请求,并与客户端进行通信。仅此而已。

那么从这一点出发,我们便可以简单的写出一个大概。

首先,我们需要使用socket库创建一个socket对象,并将其绑定在8888端口上。

# 设置服务器地址和端口
HOST = '0.0.0.0'
PORT = 8888

# 创建socket对象
socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定地址和端口
socket_server.bind((HOST, PORT))

端口号随意,只要别用到常用的就行了。

我本人是比较喜欢8888,因为http默认的是8080。

然后,使用listen方法监听端口,等待客户端的连接。

# 设置最大连接数
socket_server.listen(5)  # 这里的5是backlog的值,建议不要设置过大

这里的 “ 5” 意味着服务器最多可以挂起5个未处理的连接请求。如果队列满了,新的连接请求可能会被拒绝。

通常情况下,这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦软山�

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值