import socket
from threading import Thread
import time def html(conn):
time_tag = str(time.time())
print(time_tag)
with open('test1.html', 'r', encoding='utf-8') as f:
content = f.read()
content = content.replace('#zzxx#', time_tag)
content = content.encode('utf-8')
conn.send(content)
conn.close()
def css(conn):
with open('test.css', 'rb') as f:
content = f.read()
conn.send(content)
conn.close()
def js(conn):
with open('test.js', 'rb') as f:
content = f.read()
conn.send(content)
conn.close()
def jpg(conn):
with open('934905.jpg', 'rb') as f:
content = f.read()
conn.send(content)
conn.close()
def icon(conn):
with open('bilibili.ico', 'rb') as f:
content = f.read()
conn.send(content)
conn.close()
sk = socket.socket()
sk.bind(("127.0.0.1", 8080))
sk.listen() urlpath = [
('/', html),
('/test.css', css),
('/test.js', js),
('/934905.jpg', jpg),
('/bilibili.ico', icon),
] while True:
conn, addr = sk.accept()
msg = conn.recv(1024)
# print(msg.decode("utf-8"))
request_str = msg.decode("utf-8")
path = request_str.split('\r\n')[0].split(' ')[1]
print(path)
conn.send(b"HTTP/1.1 200 ok\r\n\r\n")
# conn.send(b"hello")
for i in urlpath:
if path == i[0]:
# i[1](conn)
t = Thread(target=i[1], args=(conn, ))
t.start()
wsgiref Web框架
from wsgiref.simple_server import make_server
import time
from showdata import showdata
from jinja2 import Template def html():
# time_tag = str(time.time())
# print(time_tag)
user_info = showdata()
# with open('test1.html', 'r', encoding='utf-8') as f:
with open('jinja2test.html', 'r', encoding='utf-8') as f:
content = f.read() tem = Template(content)
content = tem.render({"userinfo": user_info}) content = content.replace('#zzxx#', user_info['name'])
content = content.encode('utf-8')
return content
def css():
with open('test.css', 'rb') as f:
content = f.read()
return content
def js():
with open('test.js', 'rb') as f:
content = f.read()
return content
def jpg():
with open('934905.jpg', 'rb') as f:
content = f.read()
return content
def icon():
with open('bilibili.ico', 'rb') as f:
content = f.read()
return content
urlpath = [
('/', html),
('/test.css', css),
('/test.js', js),
('/934905.jpg', jpg),
('/bilibili.ico', icon),
]
def application(environ, start_response):
print(environ)
start_response('200 OK', [('k1', 'v1'), ('k2', 'v2')]) path = environ['PATH_INFO']
for i in urlpath:
if path == i[0]:
ret = i[1]()
break
else:
ret = b'404' # return [b'<h1>Hello World!<h1>']
return [ret] httpd = make_server('127.0.0.1', 8080, application)
print('Seeving HTTP on port 8080')
httpd.serve_forever()

showdata文件

import pymysql
def showdata():
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='web_test',
charset='utf8'
) cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select * from userinfo;'
cursor.execute(sql)
data = cursor.fetchone()
print(data)
conn.commit()
cursor.close()
conn.close()
return data

下面是将服务打包起来,更易于管理

manage.py

"""
写服务器逻辑
"""
from wsgiref.simple_server import make_server
from urls import urlpath def application(environ, start_response):
# print(environ)
start_response('200 OK', [('k1', 'v1'), ('k2', 'v2')]) path = environ['PATH_INFO']
print(path)
for i in urlpath:
if path == i[0]:
ret = i[1]()
break
else:
ret = b'404' # return [b'<h1>Hello World!<h1>']
return [ret] httpd = make_server('127.0.0.1', 8080, application)
# print('Seeving HTTP on port 8080')
httpd.serve_forever()

views.py

"""
写业务逻辑
""" from showdata import showdata
from jinja2 import Template def html():
# time_tag = str(time.time())
# print(time_tag)
user_info = showdata()
# with open('test1.html', 'r', encoding='utf-8') as f:
with open('templates/jinja2test.html', 'r', encoding='utf-8') as f:
content = f.read() tem = Template(content)
content = tem.render({"userinfo": user_info})
print("主页") content = content.replace('#zzxx#', user_info['name'])
content = content.encode('utf-8')
return content
def css():
with open('static/css/test.css', 'rb') as f:
content = f.read()
print("css文件")
return content
def js():
with open('static/js/test.js', 'rb') as f:
content = f.read()
return content
def jpg():
with open('static/img/934905.jpg', 'rb') as f:
content = f.read()
return content
def icon():
with open('static/img/bilibili.ico', 'rb') as f:
content = f.read()
return content

urls.py

"""
路由逻辑
"""
import views urlpath = [
('/', views.html),
('/static/css/test.css', views.css),
('/static/js/test.js', views.js),
('/static/img/934905.jpg', views.jpg),
('/static/img/bilibili.ico', views.icon)
]

models.py

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='web_test',
charset='utf8'
) cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'create table userinfo(id int primary key auto_increment,name char(10), age int' \
' not null);'
cursor.execute(sql) conn.commit()
cursor.close()
conn.close()

socket搭建web服务端的更多相关文章

  1. OpenResty搭建高性能服务端

    OpenResty搭建高性能服务端   Socket编程 Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select.poll.epoll是Linux API提 ...

  2. So easy Webservice 1.Socket建设web服务

    socket 是用来进行网络通讯的,简单来说,远程机器和本地机器各建一个socket,然后通过该socket进行连接通讯 socket简单模型图: socket的原理图: 代码实现: 1.创建sock ...

  3. 《用OpenResty搭建高性能服务端》笔记

    概要 <用OpenResty搭建高性能服务端>是OpenResty系列课程中的入门课程,主讲人:温铭老师.课程分为10个章节,侧重于OpenResty的基本概念和主要特点的介绍,包括它的指 ...

  4. wsgiref手写一个web服务端

    ''' 通过wsgiref写一个web服务端先讲讲wsgiref吧,基于网络通信其根本就是基于socket,所以wsgiref同样也是通过对socket进行封装,避免写过多的代码,将一系列的操作封装成 ...

  5. 基于Socket创建Web服务

    基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图

  6. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  7. 4、架构--NFS实践、搭建web服务、文件共享

    笔记 1.晨考 1.数据备份的方式有哪些 全量和增量 2.数据备份的命令有哪些,都有哪些优点缺点 cp : 本地,全量复制 scp :远程,全量复制 rsync :远程,增量复制 3.rsync的参数 ...

  8. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  9. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

  10. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

随机推荐

  1. Java流程控制1

    Scanner对象 java.util.Scanner 通过Scanner类来获取用户输入 next()和nextline()来获取输入的字符串,读取前我们一般需要使用hasnext()和hasnex ...

  2. react 微信h5跳转小程序

    componentDidMount() { this.getWxConfig() } getWxConfig () { // 请求后台接口拿到 data信息 wx.config({ debug: fa ...

  3. EXT GridPanel button 按钮 事件 方法 DirectMethod

    C# 代码 //首页 Ext.Net.Button btnFirst = new Ext.Net.Button(); btnFirst.Icon = Icon.ControlStartBlue; bt ...

  4. tensorboard可视化详细

    tensorboard可视化详细 2019-09-06 tensorboard可视化的官方学习链接 1.tensorboard可视化的用途 首要的目的是记录tensorflow的Graph,tenso ...

  5. Maven 中央仓库配置

    Maven 中央仓库配置 Maven 中央仓库地址大全 <!-- 1.阿里中央仓库(首推1) --> <repository> <id>alimaven</i ...

  6. redhat安装mysql8.0

    redhat 安装mysql 8.0 * 看mysql官方文档 * 安装epel源 * 安装mysql源 参考文章 redhat7通过yum安装mysql5.7.17教程:https://www.jb ...

  7. Go语言:利用 TDD 驱动开发测试 学习结构体、方法和接口

    环境安装: (新手向)在Linux中使用VScode编写 "Hello,world"程序,并编写测试-Ubuntu20.4 上一篇相关随笔: Go语言:利用 TDD 测试驱动开发帮 ...

  8. salesforce零基础学习(一百一十六)workflow -> flow浅谈

    本篇参考: https://help.salesforce.com/s/articleView?id=sf.migrate_to_flow_tool_considerations_workflow.h ...

  9. Markdown 的常用语法

    声明(叠甲):鄙人水平有限,本文章仅供参考. 且本文章是一个不全的分享,只有我目前用的比较多的语法,如果有什么错误,欢迎大家指正.具体可以查看该网站 写博客我使用的是 Markdown,为熟悉 Mar ...

  10. Linux Redhat ens33不显示IP问题

    [第一步]:查看系统网卡设备 : ip addr show ​