Я пытаюсь изучить программирование сокетов на С#. С помощью Google я нашел много хороших руководств и примеров. Но вот мой собственный код:
Приложение отправителя:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; // socket library using System.Net.Sockets; // socket library namespace Sender < class Program < static void Main(string[] args) < Console.Write(«Enter remote IP : «); IPAddress ipAddress = IPAddress.Parse(Console.ReadLine()); Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sender.Connect(ipAddress, 4444); Console.Write(«Enter text to send : «); byte[] message = Encoding.ASCII.GetBytes(Console.ReadLine().ToString()); sender.Send(message); sender.Shutdown(SocketShutdown.Both); sender.Close(); Console.ReadKey(); >// main > // main > // main
Приложение приемника:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; // socket library using System.Net.Sockets; // socket library namespace Listener < class Program < static void Main(string[] args) < IPAddress ipAddress = Dns.GetHostAddresses(Dns.GetHostName()).Where(address =>address.AddressFamily == AddressFamily.InterNetwork).First(); Console.WriteLine(«Listening on » + ipAddress.ToString() + » : 4444″); IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 4444); Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(localEndPoint); listener.Listen(10); Socket handler = listener.Accept(); byte[] bytes = new Byte[1024]; int bytesRec = handler.Receive(bytes); Console.WriteLine(Encoding.ASCII.GetString(bytes, 0, bytesRec)); handler.Shutdown(SocketShutdown.Both); handler.Close(); listener.Close(); Console.ReadKey(); > // main > // main > // main
Код работает нормально, но я хочу знать, зачем мне два сокета на стороне сервера? Первый слушатель, а второй обработчик. Можно ли опустить один из них, чтобы код стал более простым?
Клиент-серверное приложение на языке Си (TCP, Linux)
Кстати, мой код основан на этих кодах:
Также я использую Microsoft Visual C# 2008 Express Edition.
Комментарии (2)
Если прослушиватель остается подключенным к этому клиенту, как он будет прослушивать другие подключения? Одновременно может быть только одно соединение.
Для справки, в серверном приложении, ориентированном на дейтаграммы (с использованием UDP вместо TCP), сервер использует только один сокет. Последовательность идет: создать/связать/получить в цикле. Соединений нет, поэтому нет необходимости в отдельном сокете для каждого клиента.
Источник: reddeveloper.ru
Обзор и FAQ сервера на Kunpeng 920, Huawei Taishan 2280 V2
Чтобы взять на тестирование ARM-based сервер от компании Huawei, созданный на базе процессора Huawei с чипсетом Huawei и даже сетевой картой на NIC Huawei, я занимал очередь аж с конца августа. И только в декабре, в связи с близостью новогодних праздников, мне удалось урвать тестовый слот на 2 недели: тестовый парк Huawei Taishan совсем крошечный, а интерес к ним — огромный. Все хотят проверить, что это за новый зверь, который пришёл потягаться с Intel Xeon и AMD EPYC, и прежде всего, в очереди на тестирования рядом со мной толпились всякие ведомства, структуры и комитеты.
Сокеты в программировании. Пишем свой сервер и клиент.
1. Почему?
Где-то там, в других странах говорят об экономии электричества и выбросах CO2, кто-то считает, что x86 себя изжил в современном cloud-мире, а в России смотрят на политическую обстановку. Как ни крути, но Intel и AMD — корпорации «Наших американских партнёров», и пресловутый «Дядя Сэм» в любую минуту не то что может вскрыть все закладки, находящиеся в процессорах и чипсетах, но и просто ограничить поставки технологий в нашу страну.
Разумеется, что политика импортозамещения и построения суверенного интернета не могут строиться только на оборудовании Intel: как минимум — нужна диверсификация, а как максимум — использование альтернативных решений. Это всё очень серьёзно, как бы странно оно ни звучало, мы посвятили этому вопросу отдельную статью и более того — во всём мире просто гигантский спрос на «не-американское» защищённое от взлома и закладок «айти». Вот только предложения почти нет. А учитывая, что недавно Huawei обмолвился о желании вложить в обучение в России около 100 млн$, чтобы тренировать специалистов в области ARM и Cloud, уже понятно, что этой компании здесь все дороги открыты.
Сервер предоставлен компанией ELKO (https://www.elko.ru/):
ELKO Group – международный дистрибьютор ИТ-продукции и бытовой техники. Российское представительство ELKO Group ведет деятельность с 1995 года. Штаб-квартира представительства находится в Москве, региональные офисы в Санкт-Петербурге и Красноярске, логистические центры в Москве и Санкт- Петербурге. Интересы группы в России представляют компании ELKO Russia (ИТ-продукция) и Торговый Дом «Абсолют» (бытовая техника). Свыше 500 сотрудников представительства обеспечивают работу более чем с 10 000 клиентами и партнерами компании.
С другой стороны, Huawei TaiShan — это сервер от «наших китайских братьев». Им мы доверяем чуть больше, чем «американским партнёрам так как Huawei самостоятельно разработала свои процессоры и сетевые карты, то есть уровень локализации — огромный. И помимо политической воли и курса на импортозамещение, это «тёмная лошадка», которая способна выстрелить вверх, оставив где-то в прошлом всю эту мышиную возню Intel vs AMD, особенно в высокопараллельных нагрузках.
2. Много ли Тайшаней?
Да, Huawei решила охватить весь спектр серверного рынка, ну разве кроме блейдов и совсем уж бюджетки. Рассматриваемый Taishan 2280 V2 относится к классу универсальных серверов в оппозит HP DL380, но есть так же Taishan 5280 в 4U корпусе на 40 жёстких дисков, Taishan X6000 в Hi-Density корпусе на 4 ноды, анонсирован Edge-сервер (читайте что такое Edge вычисления ), и плюс к этому, компания переведёт на KunPeng свои системы хранения данных (читайте обзор Huawei OceanStor 2200 V3), которые сейчас используют процессоры Xeon.
То есть, Taishan — это не какой-то разовый, экспериментальный продукт, а уже готовый к внедрению ARM-based мир, на который вы можете переходить без оглядки на архитектуру x86, но мы всё равно будем раз за разом обращаться к совместимости с Intel/AMD.
3.Так что же за KunPeng такой?
Мы знаем про ARM процессоры, что они установлены в смартфонах, и сегодня ни у кого не возникает сомнения в их производительности и энергоэффективности. Я не возьму на себя смелость объяснять плюсы и минусы ARM-архитектуры перед x86, полагая что кто-то это уже сделал до меня или сделает вместо. Гораздо важнее, что x86 и ARM не совместимы, и грубо говоря, обычную Windows вы на KunPeng не поставите, и ваш старый Linux простым копированием файлов на новый сервер не перенесёте. Для некоторых отсутствие живой миграции ВМ c Intel на AMD — уже катастрофа (почему лишь для некоторых — читайте нашу статью), а здесь целый мир другой: вам придётся использовать ARM-версии ваших операционных систем и их программ, а некоторые компилировать заново… Закоренелые айтишники скажут, что с такой совместимостью у сервера на рынке шансов нет, и это похоронило в своё время Itanium и отбросило на задворки галактики IBM Power, но нет же: сообщество ARM растёт. Почему?
Потому что ARM в железе легко масштабируется. Сегодня Kunpeng — это до 64 ядер на одном процессоре, произведённом по 7 нм технологии, 8-канальный контроллер передовой памяти DDR4-2933, PCI Express 4.0, интегрированный 100-гигабитный сетевой контроллер с поддержкой RDMA, 64 Мб кэша L3, а завтра это можно будет взять и удвоить, ведь чиплетная конструкция на ARM архитектуре позволяет практически бесконечно масштабировать вычислительную мощность … чуть не забыл — в одном сервере может быть до 4 процессоров KunPeng.
И да, если это имеет для вас какое-то значение — «китайские братья» обычно делают дешевле, чем «американские партнёры», поэтому при одинаковом количестве ядер Huawei Taishan должен быть дешевле, чем его аналог на Intel Xeon или AMD EPYC. Но не спешите гнать лошадей, ведь на сегодня Kunpeng-ов как минимум — 7 модификаций, а на сайте Huawei информацию о них нужно искать «днём с огнём». Кстати, на всех чипах красуется логотип компании Hisilicon, на сайте которой информации ещё меньше. И даже то, что это – дочерняя компания Huawei выдают только копирайты внизу веб-страниц. Очевидно, это очередная политическая интрижка, лучший способ не увязнуть в которой — посмотреть на железо своими, ну или нашими глазами.
4. Каково качество Taishan 2280 v2 в железе
Я упомянул о том, что Huawei Taishan должен быть дешевле аналогов от HPE / Dell, но это вовсе не значит, что производитель будет экономить «на спичках». И если вы — тот сисадмин, который открывает каждый новый приходящий в эксплуатацию сервер, то первое, на что я обращаю ваше внимание — это на внимание к деталям. Вентиляторы тайваньской компании AVC имеют: а) горячую замену, б) антивибрационный подвес, в) шторочку, предотвращающую обратную циркуляцию воздуха при остановке. Ты ищешь к чему придраться, а придраться-то в общем не к чему, поэтому давайте вместо обычного описания внутренностей, ответим на частые вопросы.
Ну вот например, платы расширения в райзерах крепятся с помощью мягких поворотных защёлок, а сами райзеры устанавливаются в корпус, скользя по рельсам из порошкового алюминия. Можете вместо райзеров на PCI-E платы заказать I/O модули для установки сзади четырёх 2.5″ SSD, если 6 слотов PCIe для вас — много. И если вы заинтересовались поддержкой PCI Express 4.0, то спешу вас обрадовать: все слоты в Taishan 2280 v2 имеют стандарт PCIe 4.0 16x (ну кроме слота, занятого мезонином RAID-контроллера).
5. Можно ли установить свои платы расширения?
Мне кажется, что сервер специально создавался для установки в него плат расширения.
По умолчанию в сервере доступны 5 слотов стандарта PCIe 4.0 16x полной высоты и длины. Мы ради эксперимента установили сетевую карту Intel X520-DA2 — она работала.
6. Поддерживает ли Taishan 2280 V2 установку GPU?
Только платы без внешнего питания, такие как Tesla T4. Для этого к двум PCI слотам райзера подводится дополнительное питание. Вообще, мощности маленьких 2-киловаттных блоков питания стандарта 80 Plus Platinum должно хватить минимум на 4 самые мощные платы, но вот беда — некуда подключить кабели дополнительного питания, да и нет их в комплекте, и в инструкции этот вопрос не поднимается. У Huawei есть свои акселераторы искусственного интеллекта, и возможно причина в этом, но в любом случае данный сервер не заявляется как GPU-совместимый.
7. Какие встроенные сетевые интерфейсы есть у сервера?
Huawei Taishan 2280 V2 имеет два слота для сетевых карт в формате мезонин, причём одна из них может меняться без доступа внутрь сервера (cold swap). В терминологии Huawei эти мезонины имеют наименование FlexIO, и на сегодня существуют два типа таких плат: 4-портовая гигабитная медь (модель TM210) и 4-портовая 25-гигабитная оптика (модель TM280).
У нас, как вы видите, установлена простая TM210, и ничего интересного она не представляет: горячей замены нет, в качестве чипов — унылый Realtek 8211.
8. Чьи чипы используются для высокоскоростных интерфейсов?
Нам на тестирование пришёл сервер с дополнительной сетевой картой, имеющей 4 порта по 25 Гбит/c. Наверное, будет излишне говорить, что информации по этому контроллеру с наименованием BC51ETHB нет никакой, и чтобы пролить свет, пришлось проверить маркировку процессора. Каково же было моё удивление, когда я увидел опять же детище Huawei, FPGA процессор HiSilicon I1822. Это тот же чип, что используется в контроллере Huawei IN200, который позиционируется компанией как Intelligent NIC, а не просто сетевая карта (читайте, чем отличается Intelligent NIC от сетевой карты).
- VLAN offload
- Stateless offload (Checksum/TSO/LRO/RSS)
- VxLAN tunnel encapsulation/decapsulation offload
- OVS TC Flower offload
При интенсивном сетевом трафике, например на шлюзах безопасности, эта карта может снизить загрузку процессора на 15-20% и снизить задержку на 30%. Энергопотребление платы составляет до 15 Вт, и кстати сама карта поддерживается всеми операционными системами, включая VMware ESXi, Windows Server, RHEL, Ubuntu и другими.
9. За сохранность данных тоже отвечает Huawei?
Святая святых любого сервера, дисковая подсистема отданы во власть продукции LSI/Avago/Broadcom: активный бэкплейн и контроллер SAS3508 в виде мезонина, поддерживающий RAID вплоть до уровня 60 с бессмертным супер-конденсатором для защиты кэш-памяти и возможностью настройки через WEB-интерфейс. Контроллер может переключаться в режим JBOD для использования в программных хранилищах данных особенно с файловой системой ZFS. Плата Backplane так же использует процессор LSI, так что как и везде в серверном мире, здесь — ничего нового.
Носители имеют Vendor Lock, а в качестве OEM-ядра в них используется, в основном, HGST для HDD и Samsung для SSD, но не обязательно.
10. Что с памятью?
С памятью вообще всё интересно: здесь имеются 32 слота для модулей DDR4 DIMM ECC Registered с частотой 2933 МГц. Вы можете устанавливать плашки объёмом от 16 до 128 Гб, набирая сумасшедшие 4 Терабайта на одном хосте, но имейте в виду: все модули памяти должны быть одинаковыми по объёму, частоте и другим параметрам.
11. Можно заменить процессор, или купить 2-процессорный сервер с 1 CPU?
Нет, потому что процессоры Kunpeng 920 распаяны на материнской плате в количестве 2 штук. По маркировке Hi1620 можно догадаться, что перед нами 48-ядерный Kunpeng 920-4826. Он имеет 48 физических ядер, 46 Мб кэша L3, частоту 2.6 ГГц и TDP в районе 158 Вт. По этим параметрам китаец очень напоминает AMD EPYC, да только ещё больше.
Процессоры не поддерживают HyperThreading, поэтому 96 ядер означает 96 потоков. Между собой CPU связаны двумя шинами Hydra Link, каждая из которых имеет пропускную способность около 30 Гбит/c. Если вы переживаете, что этого не хватит для случаев, когда например виртуалка, прикрученная к ядру левого процессора работает с памятью, обслуживаемой правым, то можете в BIOS включить политику «One NUMA Per Socket», тогда гипервизор сможет рассматривать память и ядро как единый объект, на который и назначается ВМ. Кстати, очень круто, что это сделано в настройках сервера, а не на программном уровне: у VMWare есть отдельный кейс посвящённый тому, как они лечили эту проблему на процессорах AMD EPYC Napples.
12. У ARM-сервера есть BIOS?
Если вы переживали о том, есть ли в ARM-сервере BIOS, то выдыхайте с облегчением: есть. Не AMI и не Award, а собственный, и по серверным меркам — очень технологичный. Вы можете настраивать параметры PCI Express слотов, частоты опроса памяти, из общего интерфейса настраивать RAID-контроллер и прочие основные параметры.
Не забудьте сменить пароль для удалённого управления.
13. Удалённое управление есть?
Признайтесь, что непривычно лицезреть сервер без чипа ASpeed AST1500/2500, отвечающего за BMC, а всё потому, что здесь используется контроллер Hi1710 от той же Huawei.С точки зрения всяких там «антисанкций» — это идеально, потому что ASpeed — компания тайваньская, а Hisilicon — это тот же Huawei, и доверять управление сервером стороннему поставщику — небезопасно и непрестижно.
К тому же, мы «сами с усами», и у нас полноценный HTML5 интерфейс, которому (будем честны перед собой) до ASpeed-а всё же далековато: нет поддержки мобильных браузеров, нельзя подключать образ по CIFS/NFS, но правда есть и очень хорошие вещи, например, одновременная работа нескольких операторов с консолью, автоматические скриншоты и видеозапись ошибок и выбор роли пользователя BMC, а так же интеграция в домен.
В целом, по конструкции видно, что Huawei имеет большой опыт в производстве x86 серверов, и здесь компания просто реализовала свой потенциал, что читается буквально в каждой детали. И прежде чем мы оживим этого монстра, нажав виртуальную кнопку Power, давайте повторим что здесь из компонентов из какой страны. Учитывая, что всё производится в Китае, меня интересует к какой юрисдикции относится штаб-квартира разработчика того или иного устройства.
Юрисдикция штаб-квартиры разработчика
Процессоры / SoC
Источник: hwp.reviews
Асинхронный веб, или Что такое веб-сокеты
Веб-сокеты (Web Sockets) — это передовая технология, которая позволяет создавать интерактивное соединение между клиентом (браузером) и сервером для обмена сообщениями в режиме реального времени. Веб-сокеты, в отличие от HTTP, позволяют работать с двунаправленным потоком данных, что делает эту технологию совершенно уникальной. Давайте разберемся, как работает эта технология и чем она отличается от HTTP.
Как работает HTTP?
Схема обмена сообщениями по HTTP
Вы наверняка знаете, что такое HTTP (или HTTPS), поскольку встречаетесь с этим протоколом каждый день в своём браузере. Браузер постоянно спрашивает у сервера, есть ли для него новые сообщения, и получает их.
Вы также можете знать, что HTTP позволяет использовать разные типы запросов, такие как POST, GET или PUT, каждый из которых имеет своё назначение.
Как работают веб-сокеты?
Схема обмена сообщениями при использовании веб-сокетов
Веб-сокетам же для ответа не нужны ваши повторяющиеся запросы. Достаточно выполнить один запрос и ждать отклика. Вы можете просто слушать сервер, который будет отправлять вам сообщения по мере готовности.
Веб-сокеты можно использовать, если вы разрабатываете:
- приложения реального времени;
- чат-приложения;
- IoT-приложения;
- многопользовательские игры.
Когда следует избегать использования веб-сокетов?
Практически никогда. Единственный минус — это несовместимость с некоторыми браузерами, но уже 95 % браузеров поддерживают веб-сокеты.
В некоторых случаях веб-сокеты вам всё же не понадобятся. Если вы создаёте простую CMS, вам вряд ли пригодится функциональность в режиме реального времени. Также не стоит использовать веб-сокеты в REST API, поскольку вам хватит таких HTTP-запросов, как GET, POST, DELETE и PUT.
Практические примеры
В примерах ниже для клиента используется JavaScript, а для сервера — Node.js. Примеры очень просты и вряд ли пригодятся на практике, но зато позволят разобраться в сути.
Веб-сокеты
Пример чата с веб-сокетом let ws = new WebSocket(«ws://localhost:8080»); // выводим новые сообщения в консоль ws.onmessage = () => < console.log(data); >// отправляем сообщение ws.onopen = () => ws.send(‘Text’);
const WebSocket = require(‘ws’); // создаём новый websocket-сервер const wss = new WebSocket.Server(< port: 8080 >); // отправляем клиентам, когда функция clientValidator возвращает true. this — это wss. wss.broadcast = function(data, clientValidator = () => true) < this.clients.forEach(client => < if (clientValidator(client)) < client.send(data); >>); > wss.on(«connection», ws => < // событие будет вызвано, когда клиент отправит сообщение ws.on(‘message’, message => < // отправляем сообщение всем, кроме автора wss.broadcast(message, client =>client !== ws); >); >);
Вот иллюстрация работы веб-сокетов:
Демонстрация работы веб-сокетов
Эквивалент в HTTP
Так как HTTP должен постоянно проверять канал на наличие новых сообщений, можно использовать «грязную» проверку (dirty check) — подход, при котором клиент с заданной периодичностью (допустим, каждые 200 мс) проверяет наличие новых сообщений на сервере.
Чтобы не вникать в XMLHttpRequest, можно использовать библиотеку Axios. Она декларативна и очень понятна.
Обмен сообщениями в режиме реального времени let localMessages = []; // начальное обновление локального сообщения axios.get(‘http://localhost:8080/messages’) .then(() => localMessages = data.messages); // обновляем список сообщений const updateMessages = () => < axios.get(‘http://localhost:8080/messages’) .then(() => < const difference = data.messages.splice(localMessages.length); difference.forEach(message =>< console.log(message); localMessages.push(message); >); >) .catch(console.log); > // отправляем сообщение const sendMessage = text => < axios.post(‘http://localhost:8080/messages’, ); > // каждые 200 мс проверяем, есть ли новые сообщения setInterval(updateMessages, 200);
const express = require(‘express’); const bodyParser = require(‘body-parser’); const app = express(); app.use(bodyParser.json(), function(req, res, next) < res.header(«Access-Control-Allow-Origin», «*»); res.header(«Access-Control-Allow-Headers», «Origin, X-Requested-With, Content-Type, Accept»); next(); >); // в реальном приложении сообщения хранились бы в базе данных или, в некоторых случаях, в JSON-файлах, // а не в переменной, которая обнуляется при остановке сервера let messages = []; // создаем новое сообщение app.post(‘/messages’, (req, res) => < messages.push(req.body.text); res.json(< success: true >); >); // получаем все сообщения app.get(‘/messages’, (req, res) => < res.json(< messages >); >); // слушаем все запросы на localhost: 8080. app.listen(8080, () => console.log(‘Слушаю порт 8080’));
Заключение
Веб-сокеты являются одной из самых перспективных веб-технологий, которую уже сейчас используют многие разработчики. Она отлично подходит для взаимодействия в режиме реального времени, в том числе в онлайн-играх.
Источник: tproger.ru
Socket_server_client.js — Как исправить ошибки [РЕШЕНО]
Как правило, такие JS ошибки возникают из-за повреждённых или отсутствующих файлов socket_server_client.js, а иногда — в результате заражения вредоносным ПО в настоящем или прошлом, что оказало влияние на PESM. Большую часть проблем, связанных с данными файлами, можно решить посредством скачивания и установки последней версии файла JS. Мы также рекомендуем выполнить сканирование реестра, чтобы очистить все недействительные ссылки на socket_server_client.js, которые могут являться причиной ошибки.
Ниже представлен список самых последних версий файлов практически для всех версий Windows (а также для некоторых %%os%%), которые вы также можете скачать. Если в настоящий момент отсутствует необходимая вам версия socket_server_client.js, запросите ей, нажав на кнопку Request (Запрос) рядом с необходимой версией файла. Кроме того, Thomas Huhn также может предоставить вам некоторые редкие файлы, которые отсутствуют в нашем каталоге.
Если вы успешно заменили соответствующий файл в соответствующем месте, у вас больше не должно возникать проблем, связанных с socket_server_client.js. Однако мы рекомендуем выполнить быструю проверку, чтобы окончательно в этом убедиться. Убедитесь в том, что вам удалось устранить ошибку, открыв PESM и (или) выполнив операцию, при выполнении которой возникала проблема.
Источник: www.solvusoft.com