活动介绍
file-type

JSON解析与WebSocket源码整合教程

版权申诉

ZIP文件

23KB | 更新于2024-11-07 | 199 浏览量 | 0 下载量 举报 收藏
download 限时特惠:#14.90
JSONParser-master_websocket_源码.zip这个压缩包文件的标题和描述虽然相同,但它们揭示了一个非常具体的IT相关知识点,即JSON解析器和WebSocket通信协议的结合应用。由于文件标题中提及了"JSONParser"和"websocket"这两个关键概念,我们可以根据这些信息深入探讨几个相关的技术领域。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集,易于人阅读和编写,同时也易于机器解析和生成。JSON常用于Web应用程序中,作为前后端交换数据的一种方式。JSON的结构可以存储对象、数组、字符串、数值、布尔值和null,并且易于用各种编程语言实现解析。 JSONParser这个名字暗示了这个源码可能包含的是一个用于解析JSON格式数据的程序。在开发Web应用程序时,我们经常需要对从服务器接收到的JSON数据进行解析,将其转换成程序能够理解的数据结构。JSONParser可以帮助开发者在诸如Java、C#、Python等不同语言的项目中实现这一点。 另一方面,WebSocket是一种网络通信协议,它提供了浏览器与服务器全双工的通信方式。它允许服务器主动向客户端发送信息,这意味着一旦建立了WebSocket连接,服务器和客户端就可以进行双向通信。这对于实时Web应用来说非常重要,例如实时聊天应用、在线游戏、股票交易应用等。 源码文件名为JSONParser-master_websocket_源码.zip表明这可能是一个包含JSON解析和WebSocket通信功能的综合示例代码。这样的源码可能被设计为一个服务端组件,它可以接收JSON格式的消息,并通过WebSocket将这些消息推送到客户端,或者反过来,从客户端接收通过WebSocket发送的JSON数据并进行处理。对于需要实时数据交换的应用程序来说,这种组合是极其有用的。 由于提供的信息有限,无法直接分析压缩包内的具体内容。然而,我们可以推测该源码可能是用某种流行的编程语言编写的,比如JavaScript(因为WebSocket是JavaScript的一部分)、Java或者Python。不管使用的是哪种语言,该源码都可能包含以下几个关键部分: 1. JSON解析器的实现,能够处理JSON数据的编解码。 2. WebSocket服务器端的逻辑,能够处理与客户端的连接、消息传递等。 3. 可能还包括客户端脚本,用于连接WebSocket服务器和发送/接收JSON消息。 4. 用于数据交换的协议或格式的定义,确保两端能够正确解析和生成JSON格式的消息。 5. 可能还包含了一些测试用例或单元测试,确保解析器和通信逻辑的正确性和健壮性。 了解这些知识点之后,如果要在实际的开发工作中使用这些源码,开发者需要具备以下技能: - 掌握JSON数据结构和解析技术,能够理解JSON的格式和在不同编程语言中的处理方法。 - 熟悉WebSocket协议,包括如何在服务器端实现WebSocket服务,并理解其在客户端的使用。 - 能够阅读和理解源代码,对源代码进行维护或扩展。 - 如果源码包含特定语言的实现,还需要对这种语言有足够的编程经验。 以上就是从给定文件信息中可以分析出的知识点。需要注意的是,由于没有具体的源码内容,以上内容均为根据文件标题和描述所做的合理推断。实际应用中,开发者应详细阅读源码和相关文档,以获得准确的实现细节。

相关推荐

filetype

./bin/flink run -d -t yarn-per-job \ -Dyarn.application.name="flinkcdc_prod_old_smpcdb_3" \ -Dyarn.application.queue="hive" \ -Dstate.backend=rocksdb \ -Dstate.externalize-checkpoints=true \ -Dexecution.checkpointing.externalized-checkpoint-retention=RETAIN_ON_CANCELLATION \ -Dexecution.checkpointing.interval=180s \ -Dexecution.checkpointing.timeout=7200s \ -Dexecution.checkpointing.min-pause=60s \ -Dexecution.checkpointing.max-concurrent-checkpoints=1 \ -Dstate.checkpoints.dir=hdfs://hadoop102:8020/flink_ck/offline/prod_old_smpcdb \ --allowNonRestoredState \ -Dparallelism.default=4 \ -Djobmanager.memory.process.size=2048m \ -Dtaskmanager.memory.process.size=5120m \ -Dtaskmanager.numberOfTaskSlots=2 \ -c org.apache.doris.flink.tools.cdc.CdcTools \ /opt/module/flink-1.17.2-sql-cdc/lib/flink-doris-connector-1.17-1.6.2.jar \ oracle-sync-database \ --database prod_old_smpcdb \ --oracle-conf hostname=10.1.9.2 \ --oracle-conf port=1521 \ --oracle-conf database-name=PMS2 \ --oracle-conf username=pms \ --oracle-conf password="SRX3yak#8" \ --oracle-conf schema-name=PMS \ --oracle-conf debezium.database.history.store.only.captured.tables.ddl=true \ --oracle-conf debezium.log.miner.enabled=false \ --oracle-conf debezium.snapshot.mode=initial_only \ --oracle-conf debezium.snapshot.fetch.size=20000 \ --oracle-conf debezium.column.mapping="CLOB:STRING,BLOB:STRING" \ --oracle-conf debezium.snapshot.checkpoint.interval.ms=0 \ --oracle-conf debezium.transforms=encodeBlob \ --oracle-conf debezium.transforms.encodeBlob.format=base64 \ --oracle-conf debezium.database.url="jdbc:oracle:thin:@//10.1.9.2:1521/PMS" \ --including-tables "EXP_PHOTO" \ --sink-conf fenodes=10.210.31.92:18030 \ --sink-conf username=root \ --sink-conf password=zjj000000 \ --sink-conf jdbc-url=jdbc:mysql://10.210.31.92:9030 \ --sink.buffer-size=100M \ --sink.buffer-flush.interval=60000 \ --sink-conf sink.enable-2pc=false \ --sink-conf sink.label-prefix=label_cdc_prod_old_smpcdb_340 \ --sink-conf sink.stream-load.timeout=7200 \ --sink-conf sink.connect.timeout.ms=60000 \ --sink-conf sink.request.timeout.ms=3600000 \ --table-conf replication_num=1 目前是flink doris connetct 来采集表中大字段

filetype

import os import re import json from datetime import datetime from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend from binascii import hexlify, unhexlify from rest_framework import parsers, renderers from rest_framework.compat import coreapi, coreschema from rest_framework.response import Response from rest_framework.schemas import ManualSchema from rest_framework.views import APIView from rest_framework.authtoken.models import Token from rest_framework.authtoken.serializers import AuthTokenSerializer from django.contrib import auth from django.http import QueryDict from django.shortcuts import HttpResponse from django.views.generic.base import View from django.contrib.auth.hashers import make_password, check_password from .models import * from case.models import CaseType from users.models import ScoreModel from .utils import send_register_email from fcdaserver.rest_framework.views import ViewBase class UserPermissions(ViewBase): def put(self, request): exam_type = request.data.get("exam_type") user = request.user if user.is_active: user.exam_type = exam_type user.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户没有激活!"} return self.json_response(data=response_data) class ResetPwd(ViewBase): def post(self, request): old_word = request.data.get("old_pwd", "") new_pwd = request.data.get("new_pwd", "") user = auth.authenticate(username=request.user.username, password=old_word) if user is not None: if user.is_active: user.set_password(new_pwd) user.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "用户名或密码错误!"} return self.json_response(data=response_data) class MyAuthToken(APIView): throttle_classes = () permission_classes = () parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,) renderer_classes = (renderers.JSONRenderer,) serializer_class = AuthTokenSerializer if coreapi is not None and coreschema is not None: schema = ManualSchema( fields=[ coreapi.Field( name="username", required=True, location='form', schema=coreschema.String( title="Username", description="Valid username for authentication", ), ), coreapi.Field( name="password", required=True, location='form', schema=coreschema.String( title="Password", description="Valid password for authentication", ), ), ], encoding="application/json", ) def post(self, request, *args, **kwargs): username = request.data.get("username") password = request.data.get("password") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: if not check_password(password, user_obj.password): return Response({"code": 1, "msg": "密码不正确!"}) if user_obj.sn and user_obj.is_active: current_time = datetime.now().timetuple() active_time = user_obj.sn.active_time.timetuple() if int(time.mktime(current_time)) - int(time.mktime(active_time)) > 60 * 60 * 24 * user_obj.sn.expire_date: user_obj.sn.is_valid = False else: user_obj.sn.is_valid = True user_obj.sn.save() if Token.objects.filter(user=user_obj).exists(): token_key = hexlify(os.urandom(20)).decode() Token.objects.filter(user=user_obj).update(key=token_key, created=datetime.now()) token_info = Token.objects.filter(user=user_obj).first() else: token_info = Token.objects.create(user=user_obj) UserProfile.objects.filter(username=username).update(last_login=datetime.now()) if user_obj.sn.is_valid: return Response({"code": 0, "msg": token_info.key}) else: return Response({"code": 1, "msg": "当前账户已过期!请联系管理员!"}) else: return Response({"code": 1, "msg": "用户未激活!请联系管理员!"}) else: return Response({"code": 1, "msg": "用户不存在!"}) class UserRegister(View): def post(self, request, *args, **kwargs): username = request.POST.get("username", "") nickname = request.POST.get("nickname", "") email = request.POST.get("email", "") password = request.POST.get("password", "") serial_number = request.POST.get("serial_number", "") response_data = {"code": 0, "msg": ""} if username == "": response_data = {"code": 2, "msg": "用户名不允许为空!"} elif nickname == "": response_data = {"code": 2, "msg": "昵称不允许为空!"} elif password == "": response_data = {"code": 2, "msg": "密码不允许为空!"} elif email == "": response_data = {"code": 2, "msg": "邮箱不允许为空!"} elif serial_number == "": response_data = {"code": 2, "msg": "序列号不允许为空!"} if response_data["code"] != 0: return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") if not username.isalnum(): response_data = {"code": 3, "msg": "用户名包含非法字符!"} elif re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None: response_data = {"code": 3, "msg": "邮箱格式不正确!"} if response_data["code"] != 0: return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") if UserProfile.objects.filter(username=username).exists(): response_data = {"code": 1, "msg": "用户名已存在!"} else: serial_number_obj = SerialNumber.objects.filter(serial_number=serial_number).first() if not serial_number_obj or not serial_number_obj.is_valid: response_data = {"code": 2, "msg": "序列号已经过期!"} else: encrypt_pwd = make_password(password, None, 'pbkdf2_sha256') UserProfile.objects.create(username=username, nick_name=nickname, password=encrypt_pwd, email=email, sn=serial_number_obj, is_active=False) serial_number_obj.active_time = datetime.now() serial_number_obj.save() send_register_email(username, email) response_data = {"code": 0, "msg": ""} return HttpResponse(content=json.dumps(response_data, indent=4,), content_type="application/json;charset=UTF-8") class UserActive(View): def post(self, request): email_code = request.POST.get("email_code", "") response_data = {"code": 0, "msg": ""} if email_code == "": response_data = {"code": 2, "msg": "验证码无效"} if response_data["code"] == 0: email_record_obj = EmailVerifyRecord.objects.filter(code=email_code).first() if email_record_obj: user_obj = UserProfile.objects.filter(username=email_record_obj.username, email=email_record_obj.email).first() user_obj.is_active = True user_obj.save() user_group_obj = UserGroup.objects.get(name="默认组") user_group_obj.user.add(user_obj) response_data = {"code": 0, "msg": "用户已激活"} else: response_data = {"code": 2, "msg": "验证码无效"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") class UserAuthentication(View): def get(self, request): username = request.GET.get("username") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: response_data = {"code": 0, "msg": "验证码已发送至您的邮箱,请注意查收!"} send_register_email(username, user_obj.email, send_type="reset_pwd") else: response_data = {"code": 1, "msg": "用户不存在"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") def post(self, request): username = request.POST.get("username") password = request.POST.get("password") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: if user_obj.is_active: user_obj.set_password(password) user_obj.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "用户名或密码错误!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") def put(self, request): put = QueryDict(request.body) username = put.get("username") email_code = put.get("email_code") email_record_obj = EmailVerifyRecord.objects.filter(username=username, code=email_code).first() if email_record_obj: response_data = {"code": 0, "msg": "验证成功!"} else: response_data = {"code": 1, "msg": "验证失败!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") class EditPersonalInformation(ViewBase): def get(self, request): username = request.GET.get("username") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: temp = { "username": username, "nickname": user_obj.nick_name, "email": user_obj.email, "phone": user_obj.first_name } response_data = {"code": 0, "msg": "", "data": temp} else: response_data = {"code": 1, "msg": "用户名获取失败!"} return self.json_response(data=response_data) def post(self, request): username = request.POST.get("username") nickname = request.POST.get("nickname") email = request.POST.get("email") phone = request.POST.get("phone") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: user_obj.nick_name = nickname user_obj.email = email user_obj.first_name = phone user_obj.save() response_data = {"code": 0, "msg": "修改成功!"} else: response_data = {"code": 1, "msg": "用户名获取失败!"} return self.json_response(data=response_data) class ScoreView(ViewBase): def post(self, request): stage_id = request.POST.get("stageId") question_number = request.POST.get("questionNo") score = request.POST.get("score") try: ScoreModel.objects.create(user=request.user, stage_id=stage_id, question_number=question_number, score=score) return self.json_response(data={"code": 0, "msg": "提交成功!"}) except Exception as e: print(e) return self.json_response(data={"code": -1, "msg": "提交失败!"}) def get_key(key): # 确保密钥是字节串类型 if isinstance(key, str): key = key.encode('utf-8') # 填充或截断密钥以确保长度为 16 字节 key = key.ljust(16, b'\x00')[:16] return key def encode2hex(src, key): try: key = get_key(key) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) encryptor = cipher.encryptor() padder = padding.PKCS7(algorithms.AES.block_size).padder() padded_data = padder.update(src.encode('utf-8')) + padder.finalize() encrypted = encryptor.update(padded_data) + encryptor.finalize() return hexlify(encrypted).decode('utf-8') except Exception as e: print(f"encode2hex fail: {e}") return None def decode4hex(src, key): try: key = get_key(key) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) decryptor = cipher.decryptor() unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder() encrypted_bytes = unhexlify(src) decrypted = decryptor.update(encrypted_bytes) + decryptor.finalize() decrypted_padded = unpadder.update(decrypted) + unpadder.finalize() return decrypted_padded.decode('utf-8') except Exception as e: print(f"decode4hex fail: {e}") return None class CheckIdCard(View): def post(self, request): id_card = request.POST.get("id_card", "") if id_card == "": response_data = {"code": 2, "msg": "参数无效!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") id_card = decode4hex(id_card, "loginqwert@12345") user_obj = UserProfile.objects.filter(id_card=id_card).first() if user_obj and id_card: if user_obj.is_active: if Token.objects.filter(user=user_obj).exists(): token_key = hexlify(os.urandom(20)).decode() Token.objects.filter(user=user_obj).update(key=token_key, created=datetime.now()) token_info = Token.objects.filter(user=user_obj).first() else: token_info = Token.objects.create(user=user_obj) UserProfile.objects.filter(username=user_obj.username).update(last_login=datetime.now()) if user_obj.sn.is_valid: response_data = {"code": 0, "msg": "", "token": token_info.key, "username": user_obj.username} else: response_data = {"code": 1, "msg": "当前账户已过期!请联系管理员!"} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "此用户不存在!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") 逐行解析

filetype